熊猫将聚合数组列表变成字典

时间:2018-10-22 14:56:20

标签: python arrays pandas dictionary data-structures

我具有以下数据结构:

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)

但是以熊猫的方式将列表映射到字典将使我难以理解。我将发布我的python(非熊猫)答案作为参考

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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)

答案 1 :(得分:0)

解决此问题的非大熊猫方法(不是很Python)是首先遍历每个键(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)