我有一个数据帧df:

   Group1.  Group2  Val
0      1      Q      2
1      1      Q      3
2      2      R      8
3      4      Y      9

我想用每个组的值列表更新df,因此新的df将是

   Group   Group2   Val     new
0      1    Q        2     [2, 3]
1      1    Q        3     [2, 3]
2      2    R        8     [8]
3      4    Y        9     [9]

这样做的最佳方式是什么?

推荐答案

您不能直接使用groupby.transform,因此groupby.aggmap(如果有多个石斑鱼,则为merge):

df['new'] = df['Group'].map(df.groupby('Group')['Val'].agg(list))

输出:

   Group  Val     new
0      1    2  [2, 3]
1      1    3  [2, 3]
2      2    8     [8]
3      4    9     [9]

使用多个列进行分组:

cols = ['Group1', 'Group2']
df['new'] = df.merge(df.groupby(cols)['Val'].agg(list),
                     left_on=cols, right_index=True, how='left')['Val_y']

示例:

   Group1 Group2  Val     new
0       1      Q    2  [2, 3]
1       1      Q    3  [2, 3]   # used Q here as example
2       2      R    8     [8]
3       4      Y    9     [9]

Python相关问答推荐

Python中的函数中是否有充分的理由接受float而不接受int?

有什么方法可以避免使用许多if陈述

将HLS纳入媒体包

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

Python上的Instagram API:缺少client_id参数"

抓取rotowire MLB球员新闻并使用Python形成表格

为什么符号没有按顺序添加?

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

在极性中创建条件累积和

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

如何从需要点击/切换的网页中提取表格?

lityter不让我输入左边的方括号,'

网格基于1.Y轴与2.x轴显示在matplotlib中

如果包含特定值,则筛选Groupby

根据客户端是否正在传输响应来更改基于Flask的API的行为

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

如何反转一个框架中列的值?

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?

比较两个有条件的数据帧并删除所有不合格的数据帧

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用