如何优化pandas应用lambda来查看所有记录?

时间:2016-06-17 16:02:50

标签: python pandas optimization dataframe

我有一个如下所示的数据框:

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 )

然而这很慢。我该如何优化呢?

1 个答案:

答案 0 :(得分:4)

使用cummax

df['AMT_MAX'] = df.groupby('ID').AMOUNT.cummax()