如何在Pandas中无需合并DataFrame,基于GroupBy结果新增列?
在Pandas中无需合并DataFrame实现分组新增列的简便方法
当然存在更简便的实现方式,完全不需要生成中间DataFrame再合并,Pandas的groupby()搭配transform()方法就能实现和R中group_by()+mutate()一致的效果——直接基于分组计算结果为原数据集新增列。
核心实现代码
import pandas as pd df = pd.DataFrame({ 'date': ['2020-01-01', '2020-02-01', '2020-03-01'] * 3, 'name': [ 'Romulo', 'Romulo', 'Romulo', 'Daniel', 'Daniel', 'Daniel', 'Fernando', 'Fernando', 'Fernando' ] }) # 直接为原DataFrame新增max_date列 df['max_date'] = df.groupby('name')['date'].transform('max')
链式调用写法(贴近R的管道风格)
如果习惯链式操作,也可以用assign()实现:
df = df.assign( max_date=lambda x: x.groupby('name')['date'].transform('max') )
原理说明
transform()方法的作用是将分组计算的结果广播回原数据的每一行:对每个分组执行指定的聚合操作(比如max)后,会将该组的计算值填充到该组的所有行中,最终返回一个与原数据长度一致的Series,直接赋值给新列即可完成需求,完全省去了中间DataFrame的生成与合并步骤。
内容的提问来源于stack exchange,提问作者Fernando Rocha Urbano
相关产品推荐
相关产品推荐

