python - Pandas 将聚合数组列表制作成字典
问题描述
我有以下数据结构:
import pandas as pd
import json
df = pd.DataFrame( {'g1' : ['ABC', 'ABC', 'XYZ', 'XYZ'], 'g2' : ['DEF', 'GHI', 'RST', 'UVW']})
print df
>> g1 g2
0 ABC DEF
1 ABC GHI
2 XYZ RST
3 XYZ UVW
我正在尝试使用以下结构编写 JSON 文件
$ cat ABC.json
> {
"DEF" : true,
"GHI" : true
}
和
$ cat XYZ.json
> {
"RST" : true,
"UVW" : true
}
到目前为止,我已经能够创建聚合
print df.groupby(u'g1',as_index=True)[u'g2'].aggregate(lambda x: set(x))
>> g1
ABC {GHI, DEF}
XYZ {RST, UVW}
并将其转储为 JSON
dd = json.loads(df.to_json())
然后将其写入单个文件
for k,v in dd.iteritems():
with open(k+'json','wb') as fp:
json.dump(v, fp)
但是以 pandas-y 的方式将列表映射到 dict 仍然让我望而却步。我将发布我的 python(非熊猫)答案作为参考
解决方案
你可以这样做:
import json
import pandas as pd
df = pd.DataFrame({'g1': ['ABC', 'ABC', 'XYZ', 'XYZ'], 'g2': ['DEF', 'GHI', 'RST', 'UVW']})
for name, group in df.groupby('g1'):
with open('{}.json'.format(name), 'w') as out:
json.dump(dict.fromkeys(group['g2'].values, True), out)
推荐阅读
- css - 如何从 Google-fonts 的网络字体中获得真正的小型大写字母
- python - 如何使用嵌套的 for 循环重写这个 while 循环?
- node.js - 如何将邮递员中的 include_type_name 设置为 true
- ios - 我们能否检测到用户是否在后台关闭了互联网?
- java - 为什么我无法在 java 中读取大数据文件?
- postgresql - 为什么sql文件的格式会影响它们是否可以在PG中运行?
- javascript - 如何修复未链接到用于排序数据的功能的按钮?(只有javascript,没有jquery)
- google-apps-script - 从已部署的网络应用程序中的类中获取值 - Google 应用程序脚本
- python - 图像周围有一个环,它被添加到窗口中。如何删除它?
- graph - GraphDB账户建模:用户访问关系属性还是关系?