Pandas DataFrame按User_ID分组根据日期差修正Age字段的快速实现方法
高效实现方案
核心逻辑利用pandas原生向量化操作完成,避免逐行/逐分组循环,百万级数据量也可快速跑完:
- 先确保Date列为datetime格式(若已转换可跳过)
import pandas as pd # 示例数据构造 df = pd.DataFrame({ "User_ID": [ "N1", "N2", "N3", "N1", "N1", "N2", "N3", "N2" , "N1", "N1", "N1", "N2"], "Date": [ "31/10/2021", "31/10/2020" , "31/10/2019", "24/10/2019", "22/10/2018", "15/10/2017", "14/10/2017", "13/10/2016", "12/10/2016", "11/10/2015", "2/10/2015", "1/10/2015" ], "Age": [6,5,8,6,6,5,8,5,6,6,6,5] }) # 日期格式转换,dayfirst=True适配日/月/年输入格式 df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
- 核心修正逻辑
# 按用户分组取最大日期,计算年份差后修正Age df['Age'] = df['Age'] - (df.groupby('User_ID')['Date'].transform('max').dt.year - df['Date'].dt.year)
运行后输出结果完全符合预期,该方案全程用pandas内置优化算子,没有自定义循环逻辑,是当前场景下性能最优的实现方式。
内容的提问来源于stack exchange,提问作者Ishigami
相关产品推荐
相关产品推荐

