Группировка всех значений столбцов данных pandas в словарь - PullRequest
0 голосов
/ 03 октября 2018

У меня есть датафрейм для панд, который выглядит примерно так:

df=pd.DataFrame({'a':['A','B','C','A'], 'b':[1,4,1,3], 'c':[0,6,1,0], 'd':[1,0,0,5]})

Я хочу, чтобы фрейм данных выглядел так:

enter image description here

Исходный кадр данных был сгруппирован по значениям в столбце «a», и его соответствующие значения сохранены в виде словаря в новом столбце «dict».Пары ключ-значение - это имя столбца и значения в столбце соответственно.В случае, если значение в столбце «а» имеет несколько записей (например, «А» в столбце «а» встречается дважды), то список словаря должен быть создан для того же значения.

Как я могу это сделать? (Пожалуйста, игнорируйте грамматические ошибки и задавайте любые сомнения относительно вопроса, если он звучит слишком расплывчато)

1 Ответ

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

Не делай этого .Панды никогда не были предназначены для хранения списка / кортежей / диктов в сериях / колонках.Вы можете придумать дорогостоящие обходные пути, но они не рекомендуются.

Основная причина, по которой удерживать списки в серии не рекомендуется, заключается в потере векторизованной функциональности, связанной с использованием массивов NumPy, хранящихся в смежных блоках памяти.Ваша серия будет иметь тип object d, который представляет собой последовательность указателей, очень похожую на list.Вы потеряете преимущества с точки зрения памяти и производительности, а также доступа к оптимизированным методам Pandas.

См. Также В чем преимущества NumPy перед обычными списками Python? Аргументы в пользуПанды такие же, как и для NumPy.

Но если это действительно нужно:

df = df.groupby('a').apply(lambda x: x.to_dict('r')).reset_index(name='dict')
print (df)
   a                                               dict
0  A  [{'a': 'A', 'b': 1, 'c': 0, 'd': 1}, {'a': 'A'...
1  B               [{'a': 'B', 'b': 4, 'c': 6, 'd': 0}]
2  C               [{'a': 'C', 'b': 1, 'c': 1, 'd': 0}]
...