Python数据框从最大日期获取最大值

时间:2020-09-24 11:52:10

标签: python dataframe pandas-groupby

我有以下df:

    Date         Email              Amount
0   2020-04-09   john@xxmail.com    10
1   2020-05-09   john@xxmail.com    30
2   2020-08-20   mary@xxmail.com    40
3   2020-09-20   mary@xxmail.com    20
4   2020-05-04   nick@xxmail.com    10
5   2020-06-04   nick@xxmail.com    10
6   2020-07-04   nick@xxmail.com    10
7   2020-07-04   nick@xxmail.com    125

我需要获取每个电子邮件的最大日期,然后从这些日期/电子邮件中获取最大金额。

因此,对于最大日期,中间步骤是这样的:

    Date         Email              Amount
0   2020-05-09   john@xxmail.com    30
1   2020-09-20   mary@xxmail.com    20
2   2020-07-04   nick@xxmail.com    10
3   2020-07-04   nick@xxmail.com    125

最后我们得到最大金额:

    Date         Email              Amount
0   2020-05-09   john@xxmail.com    30     # general max date and max amount
1   2020-09-20   mary@xxmail.com    20     # not general max amount
2   2020-07-04   nick@xxmail.com    125    # max amount of max date

对我来说,这似乎是一个双重的分组,但是我不确定。

说明:

  • 一封电子邮件中最多可以有一行带有最大日期的邮件。
  • 最大日期的最大金额通常可能不是一封电子邮件的最大金额

1 个答案:

答案 0 :(得分:0)

日期和数量分别分组并汇总在一起。

df['Date'] = pd.to_datetime(df['Date'])
df_d = df.groupby('Email')['Date'].agg(max).reset_index()
df_a = df.groupby('Email')['Amount'].agg(max).reset_index()
final = pd.concat([df_d,df_a],axis=1)
final.columns = ['Date', 'Email', 'Email1', 'Amount']
final = final[['Date', 'Email', 'Amount']]
final
Date    Email   Amount
0   2020-05-09  john@xxmail.com 30
1   2020-09-20  mary@xxmail.com 40
2   2020-07-04  nick@xxmail.com 125