我有一个包含两列以上的数据框(Col1,Col2等...),我想生成一个索引为Col1的Series,Series的值为字典,键为Col2且值(为dict)是元组(Col1,Col2)的出现。
假设数据框是这样的:
Col1 Col2 Col3 ...
0 A b ...
1 B e ...
2 A a ...
3 C a ...
4 A b ...
5 B c ...
6 A e ...
7 B c ...
我想要的输出是:
A {'a':1,'b':2,'e':1}
B {'c':2,'e':1}
C {'a':1}
我设法通过以下循环:
for t in my_df['Col1'].unique():
my_series.loc[t] = my_df[my_df['Col1'] == t].groupby('Col2').size().to_json()
但我想知道是否有一种方法可以使用熊猫方法更有效地进行迭代。
我也在尝试用两个索引进行groupby:
my_df.groupby(['Col1','Col2']).size()
>
Col1 Col2
A a 1
b 2
e 1
B c 2
e 1
C a 1
但找不到下一步将结果转换为如上所示的dict系列
最佳答案
您需要一个defaultdict:
import collections
resul = collections.defaultdict(dict)
for row in my_df.groupby(['Col1','Col2']).size().iteritems():
resul[row[0][0]][row[0][1]] = row[1]
pprint.pprint(resul)
给出预期:
defaultdict(<class 'dict'>,
{'A': {'a': 1, 'b': 2, 'e': 1},
'B': {'c': 2, 'e': 1},
'C': {'a': 1}})
如果要摆脱defaultdict而是想要一个简单的dict:
resul = dict(resul)
关于python - 如何从pandas Dataframe groupby对象获取一系列json/字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58300387/