Конвертируйте pandas DataFrame, чтобы диктовать и сохранять дублированные индексы - PullRequest
0 голосов
/ 11 января 2019
vagrant@ubuntu-xenial:~/lb/f5/v12$ python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> data = [{'name': 'bob', 'age': 20}, {'name': 'jim', 'age': 25}, {'name': 'bob', 'age': 30}]
>>> df = pd.DataFrame(data)
>>> df.set_index(keys='name', drop=False, inplace=True)
>>> df
      age name
name
bob    20  bob
jim    25  jim
bob    30  bob
>>> df.to_dict(orient='index')
{'bob': {'age': 30, 'name': 'bob'}, 'jim': {'age': 25, 'name': 'jim'}}
>>>

Если мы преобразуем фрейм данных в словарь, дублирующаяся запись (bob, возраст 20 лет) удаляется. Есть ли какой-нибудь возможный способ создать словарь, значения которого являются списком словарей? Что-то похожее на это?

{'bob': [{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}], 'jim': [{'age': 25, 'name': 'jim'}]}

1 Ответ

0 голосов
/ 11 января 2019

Это должно быть возможно, если вы группируете индекс.

groupby Понимание

{k: g.to_dict(orient='records') for k, g in df.groupby(level=0)}
# {'bob': [{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}],
#  'jim': [{'age': 25, 'name': 'jim'}]}

Детали
groupby позволяет разделить данные на основе уникальных ключей:

for k, g in df.groupby(level=0):
    print(g, end='\n\n')

      age name
name          
bob    20  bob
bob    30  bob

      age name
name          
jim    25  jim

Для каждой группы преобразовать это в словарь, используя «записи» orient:

for k, g in df.groupby(level=0):
    print(g.to_dict('r'))

[{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}]
[{'age': 25, 'name': 'jim'}]

И пусть он доступен по ключу окуня.


GroupBy.apply + to_dict

df.groupby(level=0).apply(lambda x: x.to_dict('r')).to_dict()
# {'bob': [{'age': 20, 'name': 'bob'}, {'age': 30, 'name': 'bob'}],
#  'jim': [{'age': 25, 'name': 'jim'}]}

apply делает то же самое, что и словарное понимание - оно перебирает каждую группу. Единственная разница в том, что apply потребует один последний to_dict звонок в конце, чтобы продиктовать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...