我有一个包含两列以上的数据框(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/

10-12 22:03
查看更多