Группировка и создание словаря из кадра данных - PullRequest
0 голосов
/ 27 августа 2018

У меня есть фрейм данных df, который я хочу использовать для создания нового фрейма данных df1.

Вот фрагмент df (более 4 миллионов строк):

      xnum class/subclass
1    86963    004/665000 
51   86963    004/342000 
101  86963    004/392000 
151  86963    004/437000 
201  86963    004/480000 
251  86963    004/526000 
301  86963    004/255080 
351  86939    004/231000 
401  81868    029/603200 
451  81868    004/665000 
501  81868    029/890100 
551  69931    029/603200 
601  69931    015/199000 
651  69931    015/230000 
701  75047    029/603200 
751  75047    123/653000 
801  75047    123/1690TC 
851  75047    123/185700 
901  75047    004/665000 
951  75047    123/190900 

Я хотел бы создать словарь, если бы ключи были class/subclass, а значения - xnum, которые появляются в строках class/subclass.

Для вышеупомянутого df одно значение key: будет "004/665000": "86963", "81868", "75047".

Обратите внимание, что dtype для xnum и class/subclass является объектом, поскольку мне нужно сохранить ведущие нули.

Мои вопросы: как мне создать словарь из кадра данных? Спасибо

Ответы [ 2 ]

0 голосов
/ 27 августа 2018
df.groupby('class/subclass').xnum.agg(lambda x:x if len(x)==1 else list(x)).to_dict()
Out[759]: 
{'004/231000': 86939,
 '004/255080': 86963,
 '004/342000': 86963,
 '004/392000': 86963,
 '004/437000': 86963,
 '004/480000': 86963,
 '004/526000': 86963,
 '004/665000': [86963, 81868, 75047],
 '015/199000': 69931,
 '015/230000': 69931,
 '029/603200': [81868, 69931, 75047],
 '029/890100': 81868,
 '123/1690TC': 75047,
 '123/185700': 75047,
 '123/190900': 75047,
 '123/653000': 75047}
0 голосов
/ 27 августа 2018
[20]Qdf = df.groupby('class/subclass')['xnum'].apply(list)
Qdf.to_dict()

[20] {'004/231000': [86939],
 '004/255080': [86963],
 '004/342000': [86963],
 '004/392000': [86963],
 '004/437000': [86963],
 '004/480000': [86963],
 '004/526000': [86963],
 '004/665000': [86963, 81868, 75047],
 '015/199000': [69931],
 '015/230000': [69931],
 '029/603200': [81868, 69931, 75047],
 '029/890100': [81868],
 '123/1690TC': [75047],
 '123/185700': [75047],
 '123/190900': [75047],
 '123/653000': [75047]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...