Pandas按条件分组取OPTY_CLOSE_DATE最大值生成END_DATE列问题咨询
问题原因
原代码的groupby('SCU_KEY')['OPTY_CLOSE_DATE'].max()返回的是长度等于唯一SCU_KEY数量、以SCU_KEY为索引的聚合序列,和原DataFrame的行索引无法对齐,赋值后除索引碰巧匹配的行外,其余都会得到错误的NaN值,不符合预期。
仅处理HCM产品的修正代码
df_5['END_DATE'] = df_5[df_5['PRODUCT'] == 'HCM'].groupby('SCU_KEY')['OPTY_CLOSE_DATE'].transform('max')
该写法通过transform方法实现分组聚合结果的行级对齐:分组后会给每个HCM产品行返回对应SCU_KEY下的最大OPTY_CLOSE_DATE,非HCM产品的行自动填充为NaN,完全符合你的预期结果:
- SCU_KEY等于3的HCM行END_DATE值统一为
2020-04-15 - SCU_KEY为314、315的HCM行END_DATE值统一为
2019-02-05 - SCU_KEY为316的行中仅HCM产品行填充
2020-09-24,EPM产品行保留NaN
支持所有产品的通用代码
如果需要给所有产品都按各自SCU_KEY分组计算最大关闭日期,使用如下代码即可:
df_5['END_DATE'] = df_5.groupby(['PRODUCT', 'SCU_KEY'])['OPTY_CLOSE_DATE'].transform('max')
该代码按「产品+SCU_KEY」双维度分组,每个产品的每个SCU_KEY都会独立计算最大OPTY_CLOSE_DATE,填充到对应行。
内容的提问来源于stack exchange,提问作者Deke Marquardt
相关产品推荐
相关产品推荐

