首页 > 解决方案 > 使用 groupby 函数根据唯一条件从不同列中选择不同的值

问题描述

我有一个这样的数据框:

PA  date    grade_conc  grade_rebar grade_mason grade_work  grade_timber    grade_steel grade_total
0   1   2018-10-13  A   NR  NR  NR  A   A   NR
1   1   2018-10-14  A   NR  NR  NR  A   Z   NR
2   1   2018-10-15  A   NR  NR  NR  B   U   NR
3   2   2018-10-13  B   NR  NR  NR  B   B   NR
4   2   2018-10-14  Z   NR  NR  NR  A   B   NR
5   2   2018-10-15  U   NR  NR  NR  B   A   NR

我希望结果为


   PA     date     grade_conc   grade_rebar grade_mason grade_work  grade_timber    grade_steel grade_total
    1   2018-10-15  A   NR  NR  NR  B   Z   NR
    2   2018-10-15  Z   NR  NR  NR  B   A   NR

结果应按 PA 列分组,并为所有列选择最新日期值,除非列的值为“U”,在这种情况下,它应该是较早的日期值,只有该列没有“U”

标签: pythonpandas

解决方案


replace'U'NaN那么你想要groupby+的逻辑last

#df = df.sort_values(['PA', 'date'])
df.replace('U', np.NaN).groupby('PA').last()

          date grade_conc grade_rebar grade_mason grade_work grade_timber grade_steel grade_total
PA                                                                                               
1   2018-10-15          A          NR          NR         NR            B           Z          NR
2   2018-10-15          Z          NR          NR         NR            B           A          NR

推荐阅读