Лучше всего описано на примере
import pandas as pd
df = pd.DataFrame({
'a' : ['A','B','C','A','B','C','A','B','C'],
'b': [1,2,3,4,5,6,7,8,9]}
)
И я хочу создать столбец, содержащий в list
элементы столбца b
по группе столбцов a
в результате получается следующее
a b c
0 A 1 [1, 4, 7]
1 A 4 [1, 4, 7]
2 A 7 [1, 4, 7]
3 B 2 [2, 5, 8]
4 B 5 [2, 5, 8]
5 B 8 [2, 5, 8]
6 C 3 [3, 6, 9]
7 C 6 [3, 6, 9]
8 C 9 [3, 6, 9]
Я могу сделать это с помощью groupby
и apply
или agg
, а затем присоединить фреймы данных, например,
df_tmp = df.groupby('a')['b'].agg(list).reset_index()
df.merge(df_tmp, on='a')
Но я бы также ожидаете сделать то же самое с transform
df['c'] = df.groupby('a')['b'].transform(list)
, но столбец c
такой же, как столбец b
Также следующий
df.groupby('a')['b'].transform(lambda x: len(x))
вернуть серию со значениями 3
, т.е. длина сгруппированных элементов равна 3 (и следовало ожидать)
Также это
df.groupby('a')['b'].transform(lambda x: list(x))
не дает ожидаемого результата.
Итак, на мой вопрос, как я могу получить желаемый результат с помощью groupby и tranform
pandas
версия 1.0.5