python - 如何从 pandas Dataframe groupby 对象获取一系列 json/字典

标签 python json pandas-groupby

我有一个包含超过 2 列(Col1、Col2 等)的 Dataframe,我想生成一个系列,其中索引为 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 方法更有效地完成此操作,而无需迭代。

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

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

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

最佳答案

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

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

resul = dict(resul)

关于python - 如何从 pandas Dataframe groupby 对象获取一系列 json/字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58300387/

相关文章:

python - 从字符串中删除范围内的字符

python - 两个列表的重叠百分比

javascript - JSON:未捕获类型错误:无法设置未定义的属性 'values'

json - 为什么这个 getOrElse 语句返回 ANY 类型?

python - pandas groupby 中 "as_index = False"和 "reset_index()"之间的区别

python - 在应用 pandas groupby 后向图中添加条形以显示平均值

python - 使用 pexpect 获取 'ls' 命令的输出

python - 使用 pyodbc 将 Raspberry Pi 3 连接到 MSSQL Server

json - 部署 Aurelia/Node 应用程序时需要什么?

python - 根据用户来自的集群将值分配给用户