如何基于相同Case标识计算Year列差值并新增YearDifference列?
Pandas按Case分组计算年份差值的实现方法
不用for循环,直接用Pandas的groupby+transform就能高效解决这个问题,步骤如下:
- 先构造示例DataFrame(模拟从SQL读取的数据):
import pandas as pd # 模拟输入数据 data = { 'Year': [2015, 2016, 2017, 2015, 2018], 'Case': ['1A', '1A', '1A', '2F', '2F'] } df = pd.DataFrame(data)
- 新增
YearDifference列,按Case分组计算年份最大值与最小值的差值:
# 分组计算差值,并将结果映射回原DataFrame的每一行 df['YearDifference'] = df.groupby('Case')['Year'].transform(lambda x: x.max() - x.min())
- 查看结果:
print(df)
输出结果和你期望的一致:
Year Case YearDifference 0 2015 1A 2 1 2016 1A 2 2 2017 1A 2 3 2015 2F 3 4 2018 2F 3
为什么不用for循环?
Pandas的transform方法会自动将分组计算的结果匹配到原DataFrame对应的每一行,全程是向量化操作,比手动写for循环效率高得多,尤其是数据量较大时,能避免循环带来的性能瓶颈。
内容的提问来源于stack exchange,提问作者medusa_apologist
相关产品推荐
相关产品推荐

