代码之家  ›  专栏  ›  技术社区  ›  HT121

根据下一行的值更新当前行

  •  1
  • HT121  · 技术社区  · 6 年前

    我有以下数据框:

    df = pd.DataFrame({'ID': ['1','1','1','1','2','2','2'], \
                       'episode': ['111', '112','113', '114','115','116','117'], \
                       'risk': ['L', 'L','H', 'L','H','L','L'], \
                       'date': ['21-01-2015', '27-02-2015','19-03-2015', '09-05-2015','3-01-2015','7-02-2015','11-05-2015']})
    

    每个ID中可以有几行(不同的插曲编号),并且每一行具有L或H的风险标识。我要检查每个ID是否存在风险H。一旦ID的任何插曲中存在风险H,我要将剩余行中的风险更改为H,以便相同ID的任何之前插曲都具有风险H。数据已按ID、事件和日期排序。最终输出为:

      ID       date episode risk
    0  1 2015-01-21     111    L
    1  1 2015-02-27     112    L
    2  1 2015-03-19     113    H
    3  1 2015-05-09     114    H
    4  2 2015-01-03     115    H
    5  2 2015-02-07     116    H
    6  2 2015-05-11     117    H
    

    我怎样才能做到这一点?

    1 回复  |  直到 6 年前
        1
  •  1
  •   BENY    6 年前

    检查 groupby + cumprod

    df['risk'].ne('H').groupby(df['ID']).cumprod().map({True:'L',False:'H'})
    Out[265]: 
    0    L
    1    L
    2    H
    3    H
    4    H
    5    H
    6    H
    Name: risk, dtype: object
    #df['risk']=    df['risk'].ne('H').groupby(df['ID']).cumprod().map({True:'L',False:'H'})