最好用一个例子来描述
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 和转换获得所需的结果
pandas
版本是 1.0.5
最佳答案
我在下面提出了一个解决方案。 PS:transform
应该有问题, 当对象类型为 list
tuple
或 set
..
df.groupby('a')['b'].transform(lambda x : [x.tolist()]*len(x))
Out[226]:
0 [1, 4, 7]
1 [1, 4, 7]
2 [1, 4, 7]
3 [2, 5, 8]
4 [2, 5, 8]
5 [2, 5, 8]
6 [3, 6, 9]
7 [3, 6, 9]
8 [3, 6, 9]
Name: b, dtype: object
关于pandas - Groupby 转换到 Pandas 中的列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62458837/