#python #pandas #dataframe #pandas-groupby
Вопрос:
У меня есть фрейм данных, назовем его «данные», следующим образом:
index ID name
0 23 aaa
1 42 bbb
2 23 aab
3 42 bbb
4 42 bbb
...
Я хочу подсчитать количество встречающихся идентификаторов и создать дополнительный столбец для этого, по которому я могу сортировать. Кроме того, я хочу добавить имена в наборы, потому что они могут отличаться. Что-то вроде этого (дополнительный индекс необязательно):
count ID name
3 42 {bbb}
2 23 {aaa, aab}
Я знаю, что решение находится где-то в функции group_by (). Я могу поместить имена в наборы с data.groupby('ID')['name'].apply(set).reset_index()
помощью, но как дополнительно подсчитать вхождения идентификатора и правильно добавить числа во фрейм данных? Я стою на шланге, как говорит немец. Большое спасибо!
Ответ №1:
Вы можете использовать .agg
с несколькими параметрами:
x = df.groupby("ID", as_index=False).agg(
count=("ID", "size"), name=("name", set)
)
print(x)
С принтами:
ID count name
0 23 2 {aaa, aab}
1 42 3 {bbb}
Ответ №2:
Вы можете использовать groupBy.agg()
следующее:
df.groupby('ID').agg({'ID':'count',
'name':set}).rename(columns={'ID':'ID_count'}).reset_index()
С принтами:
ID ID_count name
0 23 2 {aaa, aab}
1 42 3 {bbb}
Ответ №3:
Вы можете использовать это:
df.groupby(['ID'])['name'].agg([set,'count']).rename(columns={'set':'name'}).reset_index()
Выход:
ID name count
0 23 {aaa, aab} 2
1 42 {bbb} 3