У меня есть такой фрейм данных:
A B C
0 1 0.749065 This
1 2 0.301084 is
2 3 0.463468 a
3 4 0.643961 random
4 1 0.866521 string
5 2 0.120737 !
призвание
In [10]: print df.groupby("A")["B"].sum()
вернется
A
1 1.615586
2 0.421821
3 0.463468
4 0.643961
Теперь я хотел бы сделать «то же самое» для столбца «C». Поскольку этот столбец содержит строки, sum () не работает (хотя вы можете подумать, что он объединит строки). Что мне действительно хотелось бы видеть, так это список или набор строк для каждой группы, т.е.
A
1 {This, string}
2 {is, !}
3 {a}
4 {random}
Я пытался найти способы сделать это.
Series.unique () ( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.unique.html ) не работает, хотя
df.groupby("A")["B"]
это
pandas.core.groupby.SeriesGroupBy object
поэтому я надеялся, что любой метод Series будет работать. Любые идеи?
apply
иlambda
. Я пришел сюда, задаваясь вопросом, почему наpandas
самом деле объединяются и не возвращаются ошибки при суммировании строк.Вы можете использовать этот
apply
метод для применения произвольной функции к сгруппированным данным. Так что если хотите набор, обращайтесьset
. Если вам нужен список, подайте заявкуlist
.Если вам нужно что-то еще, просто напишите функцию, которая делает то, что вы хотите, а затем
apply
это.источник
.reset_index()
.Вы можете использовать функцию
aggregate
(илиagg
) для объединения значений. (Непроверенный код)источник
Вы можете попробовать это:
источник
простое решение:
источник
df.groupby(['A','B']).c.unique().apply(lambda x: ';'.join(x)).reset_index()
Именованные агрегаты с
pandas >= 0.25.0
Начиная с версии pandas 0.25.0, мы назвали агрегаты, в которых мы можем группировать, агрегировать и в то же время назначать новые имена нашим столбцам. Таким образом, мы не получим столбцы MultiIndex, а имена столбцов будут иметь больше смысла, учитывая данные, которые они содержат:
агрегировать и получить список строк
агрегировать и соединять строки
источник
Если вы хотите перезаписать столбец B во фрейме данных, это должно сработать:
источник
Следуя хорошему ответу @ Erfan, в большинстве случаев при анализе совокупных значений вам нужны уникальные возможные комбинации этих существующих значений символов:
источник