我有一个如下所示的数据框:
ID YEAR AMOUNT
1 | 2001 | 4340
1 | 2002 | 5460
1 | 2004 | 1245
1 | 2006 | 6000
2 | 2003 | 5000
2 | 2006 | 3059
....
我想添加一个计算迄今为止最高金额的列,如:
ID YEAR AMOUNT AMT_MAX
1 | 2001 | 4340 | 4340
1 | 2002 | 5460 | 5460
1 | 2004 | 1245 | 5460
1 | 2006 | 6000 | 6000
2 | 2003 | 5000 | 5000
2 | 2006 | 3059 | 3059
....
我写这篇文章是为了做到这一点:
df['AMT_MAX'] = df.apply(lambda x:
df[(df.ID == x['ID']) & (df.YEAR <= x['YEAR'])]['AMOUNT'].max(), axis=1 )
然而这很慢。我该如何优化呢?
答案 0 :(得分:4)
使用cummax
df['AMT_MAX'] = df.groupby('ID').AMOUNT.cummax()