gpt4 book ai didi

python - 如何按列分组并将其他列的值作为 pandas 中的列表返回?

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:36 25 4
gpt4 key购买 nike

我在将一列的值组合在一起并保留其他列的各自值时遇到了麻烦。我想做类似的事情:grouping rows in list in pandas groupby

但相反,我希望列表/字典(最好是后者)包含多列的值。此数据框的示例:

df:

Col1   Col2   Col3
A xyz 1
A pqr 2
B xyz 2
B pqr 3
B lmn 1
C pqr 2

我想要类似的东西-

A {'xyz':1, 'pqr': 2}
B {'xyz':2, 'pqr': 3, 'lmn': 1}
C {'pqr':2}

我试过

df.groupby('Col1')[['Col2', 'Col3']].apply(list) 

这是链接帖子中提到的解决方案的变体,但没有给我需要的结果。

从那时起,我还想将其转换为以下形式的数据框:

  xyz  pqr  lmn
A 1 2 NaN
B 2 3 1
C NaN 2 NaN

最佳答案

使用 pivot unstack :

df = df.pivot(index='Col1',columns='Col2',values='Col3')
print (df)
Col2 lmn pqr xyz
Col1
A NaN 2.0 1.0
B 1.0 3.0 2.0
C NaN 2.0 NaN

df = df.set_index(['Col1','Col2'])['Col3'].unstack()
print (df)

Col2 lmn pqr xyz
Col1
A NaN 2.0 1.0
B 1.0 3.0 2.0
C NaN 2.0 NaN

但是如果:

ValueError: Index contains duplicate entries, cannot reshape

表示重复,需要 pivot_table 或与 groupby 聚合通过 mean (可以更改为 summedian ),最后由 unstack reshape :

print (df)
Col1 Col2 Col3
0 A xyz 1 <-same A, xyz
1 A xyz 5 <-same A, xyz
2 A pqr 2
3 B xyz 2
4 B pqr 3
5 B lmn 1
6 C pqr 2

df = df.groupby(['Col1','Col2'])['Col3'].mean().unstack()
print (df)
Col2 lmn pqr xyz
Col1
A NaN 2.0 3.0 (1+5)/2 = 3
B 1.0 3.0 2.0
C NaN 2.0 NaN

编辑:

通过 Col1 检查所有重复项和 Col2 :

print (df[df.duplicated(subset=['Col1','Col2'], keep=False)])
Col1 Col2 Col3
0 A xyz 1
1 A xyz 5

编辑1:

如果重复只需要第一行:

df = df.groupby(['Col1','Col2'])['Col3'].first().unstack()
print (df)
Col2 lmn pqr xyz
Col1
A NaN 2.0 1.0
B 1.0 3.0 2.0
C NaN 2.0 NaN

或者最好先通过 drop_duplicates 删除重复项然后使用第一个或第二个解决方案:

df = df.drop_duplicates(subset=['Col1','Col2'])
df = df.pivot(index='Col1',columns='Col2',values='Col3')
print (df)
Col2 lmn pqr xyz
Col1
A NaN 2.0 1.0
B 1.0 3.0 2.0
C NaN 2.0 NaN

关于python - 如何按列分组并将其他列的值作为 pandas 中的列表返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44982348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com