我有以下数据框:

game = pd.DataFrame({
    'team': ['A', 'A', 'B', 'B', 'C', 'C', 'C'],
    'members': [1, 2, 3, 4, 5, 6, 7]
})
game
  team  members
0    A        1
1    A        2
2    B        3
3    B        4
4    C        5
5    C        6
6    C        7

我想将列‘Members’中的值按组‘Team’连接起来形成一个列表,并将它们附加到一个新变量ALL_TEAM_MEMBERS.预期结果为:

  team  members  all_team_members
0    A        1            [1, 2]
1    A        2            [1, 2]
2    B        3            [3, 4]
3    B        4            [3, 4]
4    C        5         [5, 6, 7]
5    C        6         [5, 6, 7]
6    C        7         [5, 6, 7]

我有以下我认为可以工作的代码,但结果并不像预期的那样

game['all_teamm_members'] = game.groupby('team').members.transform(lambda x : x.tolist())

附注:我知道我可以做到这一点,首先使用game.groupby('team').members.apply(lambda x : x.tolist())在唯一组(团队)级别创建列表,然后将数据帧合并回原始数据帧,但是我真的很好奇如何使用transform()来实现这一点

推荐答案

groupby.aggmap:

game['all_team_members'] = game['team'].map(game.groupby('team')['members']
                                                .agg(list))

使用groupby.transform,你必须手动重复列表,否则它会扩展回单独的行:

game['all_team_members'] = (game.groupby('team')['members']
                                .transform(lambda x: [list(x)]*len(x))
                           )

请注意,在上面的两种方法中,组中的所有列表都是相同的对象(如果您不打算改变它们,这可能是一个优势).

拥有副本(效率较低):

game['all_team_members'] = (game.groupby('team')['members']
                                .transform(lambda x: [list(x) for _ in 
                                                      range(len(x))])
                           )

输出:

  team  members all_team_members
0    A        1           [1, 2]
1    A        2           [1, 2]
2    B        3           [3, 4]
3    B        4           [3, 4]
4    C        5        [5, 6, 7]
5    C        6        [5, 6, 7]
6    C        7        [5, 6, 7]

Python相关问答推荐

Pythind 11无法弄清楚如何访问tuple元素

线性模型PanelOLS和statmodels OLS之间的区别

将整组数组拆分为最小值与最大值之和的子数组

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

如何在polars(pythonapi)中解构嵌套 struct ?

大小为M的第N位_计数(或人口计数)的公式

当独立的网络调用不应该互相阻塞时,'

如何在turtle中不使用write()来绘制填充字母(例如OEG)

如何从列表框中 Select 而不出错?

* 动态地 * 修饰Python中的递归函数

Matplotlib中的字体权重

交替字符串位置的正则表达式

在二维NumPy数组中,如何 Select 内部数组的第一个和第二个元素?这可以通过索引来实现吗?

将一个双框爆炸到另一个双框的范围内

计算机找不到已安装的库'

用fft计算指数复和代替求和来模拟衍射?

多个矩阵的张量积

文本溢出了Kivy的视区

Pandas 删除只有一种类型的值的行,重复或不重复

普洛特利express 发布的人口普查数据失败