pandas - Groupby 转换到 Pandas 中的列表不起作用

标签 pandas pandas-groupby

最好用一个例子来描述

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 做到这一点和 applyagg然后像这样加入数据帧
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 tupleset ..

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/

相关文章:

python - Pandas 数据框中的Groupby

python - Pandas 按两列分组,仅根据计数保留满足条件的记录

python - Pandas:如何结合 nunique 和 sum

python - 当 Pandas df 列中的时间不在 Excel 列中时,如何删除它?

python - 将大 csv 转换为 hdf5

python - 使用 Numpy datetime64 对象索引/切片 Pandas DataFrame

python - Pandas 将性别列拆分为两列

python - 在 Pandas 中重新格式化数据框

python - 如何在 Pandas DataFrame 中对列表中的项目进行 "and"操作

python pandas 为我分组的列提供了一个关键错误,即使 bool 表达式显示该列是数据帧的一部分