Создание словаря из панда данных

1

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

**towns**
Paris
Berlin
London
etc..

Кроме того, у меня есть еще один пакет данных totalPopulation, который выглядит примерно так:

ID-cell    TOWNS      NumberOfPopulation
1          Paris       444
1          Berlin      333
1          London      111
2          Paris       222
2          London      555
3          Paris       999

И мне нужно создать словарь с вложенным списком, чтобы получить что-то вроде этого:

'Paris' : [1, 444],[2,222],[3,999]
'Berlin': [1,333]
'London': [1,111], [2,555]

Я попытался сделать что-то вроде этого:

dictionary = {}
for town in towns.itertuples(index = False):
  dictionary[town] = totalPopulation.loc[totalPopulation['TOWNS'] == town].sort_values(totalPopulation.columns[2], ascending=False)

Когда я вызываю метод печати после цикла, я получаю список чисел, я предполагал индексы. И я ожидаю ценностей. : D

EDIT: я просто перезагружаю компьютер (не по этой причине: D) и снова запускаю свою программу. Теперь я получаю следующее:

{Pandas(town='Paris'): Empty DataFrame
Columns: [ID-cell, TOWNS, NumberOfPopulation]
Index: [], Pandas(Province='London'): Empty DataFrame
Columns: [ID-cell, TOWNS, NumberOfPopulation]
....}

И когда я пытаюсь

print(dictionary['Paris']) 

Я получаю keyError

Теги:
pandas
python-3.x
dictionary

2 ответа

4
Лучший ответ

Вы можете делать с groupby и to_dict

df.groupby('TOWNS')['ID-cell','NumberOfPopulation'].apply(lambda x : x.values.tolist()).get(towns)
{'Berlin': [[1, 333]],
 'London': [[1, 111], [2, 555]],
 'Paris': [[1, 444], [2, 222], [3, 999]]}
  • 1
    Большое спасибо!!! :))
  • 0
    @Neven это :-) счастливое кодирование
0

Это один из способов, если вы в порядке со списком кортежей. Предполагается, что ваш фреймворк уже отсортирован по ID-cell и для каждого города этот номер уникален.

from functools import partial

res = df.groupby(['TOWNS'])['NumberOfPopulation']\
        .apply(partial(enumerate, start=1))\
        .apply(list)\
        .to_dict()

print(res)

{'Berlin': [(1, 333)],
 'London': [(1, 111), (2, 555)],
 'Paris': [(1, 444), (2, 222), (3, 999)]}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню