猿问

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(非熊猫)答案作为参考


米琪卡哇伊
浏览 398回答 2
2回答

倚天杖

你可以这样做:import jsonimport pandas as pddf = 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)

慕村9548890

解决此问题的非 Pandas(并且不是非常 Pythonic)的方法是首先循环遍历每个键 (k),然后循环遍历每个数组 (v) 元素,为数组的每个成员创建一个字典 (vd) 条目。它有效,这就是我能说的。vd = dict()for k,v in dd.iteritems():    for x in v:        vd[x] = True    with open(k+'json','wb') as fp:        json.dump(vd, fp)
随时随地看视频慕课网APP

相关分类

Python
我要回答