подсчет некоторых строковых значений для каждой группы идентификационных номеров - PullRequest
1 голос
/ 28 мая 2020

У меня есть данные в этой форме:

import pandas as pd
people_num=[1,1,2,2,2]
visited_places=['school', 'restaurant', 'church', 'restaurant', 'church']

df= pd.DataFrame({'people_num':people_num, 'visited_places':visited_places})

Я хочу добавить новый столбец, содержащий счетное количество строк для каждого числа людей.

Для визуализации исходная таблица например,

+------------+----------------+
| people_num | visited_places |
+------------+----------------+
|          1 | school         |
|          1 | restaurant     |
|          2 | church         |
|          2 | restaurant     |
|          2 | church         |
+------------+----------------+

И новая таблица, которую я хочу получить из этого:

+------------+------------------------------+
| people_num |       counts_of_places       |
+------------+------------------------------+
|          1 | {'school':1,'restaurant':1}  |
|          2 | {'church':2, 'restaurant':1} |
+------------+------------------------------+

Заранее спасибо.

1 Ответ

3 голосов
/ 28 мая 2020

Я не думаю, что вам следует помещать словари в столбцы DataFrame.

Я предлагаю следующее альтернативное решение.

>>> df
   people_num visited_places
0           1         school
1           1     restaurant
2           2         church
3           2     restaurant
4           2         church
>>> df.groupby('people_num')['visited_places'].value_counts().unstack(fill_value=0)
visited_places  church  restaurant  school
people_num                                
1                    0           1       1
2                    2           1       0

... но если вы настаиваете

>>> df.groupby('people_num')['visited_places'].agg(lambda g: g.value_counts().to_dict())
people_num
1    {'restaurant': 1, 'school': 1}
2    {'church': 2, 'restaurant': 1}
Name: visited_places, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...