首页 > 解决方案 > 根据 groupby 输出更新列值

问题描述

我有多索引 df,其中一个日期索引可以有多个记录。如何更新col_2每个bond_name的最大值col_1?我有的:

date        bond_name    col_1   col_2
2020-11-15  aaa          0.5     t1
            bbb          0.5     t1
2020-11-16  ccc          0.75    t1
2020-11-20  bbb          0.9     t1
            ddd          0.9     t1
2020-11-29  ddd          0.95    t1

和所需的输出:

date        bond_name    col_1   col_2
2020-11-15  aaa          0.5     t2
            bbb          0.5     t1
2020-11-16  ccc          0.75    t2
2020-11-20  bbb          0.9     t2
            ddd          0.9     t1
2020-11-29  ddd          0.95    t2

标签: pythonpandasdataframefiltergroup-by

解决方案


检查与idxmax

df.loc[df.groupby('date')['col_1'].idxmax(),'col_2'] = 't2'
df
Out[83]: 
                      col_1 col_2
date       bond_name             
2020-11-15 aaa         0.50    t2
           bbb         0.50    t1
2020-11-16 ccc         0.75    t2
2020-11-20 bbb         0.90    t2
           ddd         0.90    t1
2020-11-29 ddd         0.95    t2

推荐阅读