如何从熊猫获取一系列 json/字典 数据帧按对象分组



我有一个包含 2 列以上(Col1、Col2 等(的数据帧,我想生成一个索引为 Col1 且系列的值是字典,其中键是 Col2,(字典的(值是元组的八进制(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()

但我想知道是否有办法使用 pandas 方法更有效地做到这一点,而无需迭代。

我还尝试使用两个索引进行分组:

my_df.groupby(['Col1','Col2']).size() 
>
Col1  Col2
A     a     1
b     2
e     1
B     c     2
e     1
C     a     1

但找不到将结果转换为字典系列的下一步,如上所示

默认字典是你需要的:

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}})

如果你想摆脱默认的字典,而想要一个普通的字典:

resul = dict(resul)

最新更新