Панды превращают сводный список массивов в словарь - PullRequest
0 голосов
/ 22 октября 2018

У меня следующая структура данных:

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 (non-pandas) в качестве ссылки

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы можете сделать что-то вроде этого:

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)
0 голосов
/ 22 октября 2018

Не-панда (и не очень питонический) способ решить эту проблему состоит в том, чтобы циклически проходить сначала каждый ключ (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...