如何用Pandas的groupby().transform()按组提取2月值生成新列
解决方案
可以通过groupby结合transform实现需求,核心思路是对每个分组筛选出Month=2对应的Value,再将该值广播到分组内的所有行:
import pandas as pd data = pd.DataFrame({ 'Group':['A','A','A','A','B','B'], 'Month':[1,2,3,4,1,2], 'Value':[100,300,700,750, 200,400] }) # 生成目标列 data['Desired_Result'] = data.groupby('Group').transform( lambda grp: grp[grp['Month'] == 2]['Value'].iloc[0] ) print(data)
代码说明
groupby('Group'):按Group字段将数据拆分为多个子数据集;transform():对每个分组执行匿名函数,并将结果同步回原数据的对应行,保证结果长度与原数据一致;- 匿名函数中,
grp指代单个分组的DataFrame,先通过grp['Month'] == 2筛选出分组内Month为2的行,提取对应的Value值,再用iloc[0]取出该值(假设每个分组仅有一行Month=2的数据)。
运行后得到的结果与期望完全一致:
Group Month Value Desired_Result 0 A 1 100 300 1 A 2 300 300 2 A 3 700 300 3 A 4 750 300 4 B 1 200 400 5 B 2 400 400
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

