#python #pandas #dataframe
Вопрос:
У меня есть фрейм данных, который выглядит примерно так — с name,count
бытием strings
и id
бытием int
.
Имя | считать | ID |
---|---|---|
азбука | 123 | 01122 |
азбука | 123 | 55432 |
азбука | 123 | 33432 |
азбука | 123 | 34786 |
xyz | 232 | 36126 |
xyz | 232 | 67437 |
Используя панд — я пытаюсь добраться до чего-то вроде
Имя | считать | ID |
---|---|---|
азбука | 123 | 01122,55432,33432,34786 |
xyz | 232 | 36126,67437 |
Я думал, что сработает что — то вроде приведенного ниже, но, похоже, на самом деле это не входит в список.
df.groupby(['name','count'])['id'].apply(lambda x: ','.join(map(str, x))).reset_index()
Ответ №1:
использовать astype()
groupby()
agg()
:
out=df.astype({'id':'str'}).groupby(['name','count'],as_index=False)['id'].agg(','.join)
#df.groupby(['name','count'],as_index=False)['id'].agg(lambda x: ','.join(map(str, x)))
выход из:
name count id
0 abc 123 1122,55432,33432,34786
1 xyz 232 36126,67437
Комментарии:
1. Большое вам спасибо! Я на самом деле думаю, что мой исходный запрос тоже сработал, но я ошибался, не создавая новый df с ним в своем коде (буду признателен за обратную связь, если вы думаете, что это не так). Ваши работы великолепны! спасибо тебе!
2. @Тим, это тоже работает
df.groupby(['name','count'])['id'].apply(lambda x: ','.join(map(str, x))).reset_index()
3. @Tim также использует
lambda x: ','.join(map(str, x))
функцию agg bcz, даже если это анонимная функция, но она работает быстрее, чемastype({'id':'str'})
для одного столбца