Pandas groupby+transform实现按ID分组取最新时间对应值更新全组
问题解决
报错原因
你代码中的['C'].max()是对Python列表对象调用max方法,自然会触发AttributeError,且你分组后仅选择了B列,也无法获取到C列的数值。
前置处理
首先需要将B列转为标准datetime类型,避免字符串按字典序比较导致时间判断错误:
import pandas as pd # 按日期格式转换为datetime类型 df['B'] = pd.to_datetime(df['B'], format='%m/%d/%Y')
高效实现代码
以下方案时间复杂度为O(n),无额外排序操作,10万+行数据可在毫秒级完成处理:
# 生成每个A分组对应最大B值的C值映射表 latest_c_map = df.loc[df.groupby('A')['B'].idxmax()].set_index('A')['C'] # 批量替换所有行的C列值 df['C'] = df['A'].map(latest_c_map)
结果验证
代入你提供的示例数据,处理后输出的C列完全符合预期:
'a':['zx5','zx5','ab1','ab1','mn3','mn3'], 'b':['1/1/2021','1/2/2021','1/3/2021','1/4/2021','1/5/2021','1/4/2021'], 'c':['bbb','bbb','ddd','ddd','eee','eee']
内容的提问来源于stack exchange,提问作者Coel Locandro
相关产品推荐
相关产品推荐

