熊猫-确定数据框中每个帐户的最长日期

sha*_*var 3 date max dataframe pandas

我有一个示例数据框:

df = pd.DataFrame({'Account':['1234', '1234', '4567', '4567'],
                   'Date':['12/5/2017', '12/5/2017', '12/10/2017', '12/11/2017']})

df.Date = pd.to_datetime(df.Date)

df.head()

     Account   Date
0    1234     2017-12-05
1    1234     2017-12-05
2    4567     2017-12-10
3    4567     2017-12-11
Run Code Online (Sandbox Code Playgroud)

我想添加一个名为MaxDate的列,其中将包含每个帐户的最后日期。最终结果如下:

df = pd.DataFrame({'Account':['1234', '1234', '4567', '4567'],
                   'Date':['12/5/2017', '12/5/2017', '12/10/2017', '12/11/2017'],
                   'MaxDate':['12/5/2017', '12/5/2017', '12/11/2017', '12/11/2017']})

df.Date = pd.to_datetime(df.Date)
df.MaxDate = pd.to_datetime(df.MaxDate)

df.head()

     Account  Date         MaxDate
0    1234     2017-12-05   2017-12-05
1    1234     2017-12-05   2017-12-05
2    4567     2017-12-10   2017-12-11
3    4567     2017-12-11   2017-12-11
Run Code Online (Sandbox Code Playgroud)

我不确定是否应该在数据帧上迭代还是?请注意,数据集可以是一百万行,因此性能是一个考虑因素。任何指导表示赞赏。

Max*_*axU 5

In [107]: df['MaxDate'] = df.groupby('Account').Date.transform('max')

In [108]: df
Out[108]:
  Account       Date    MaxDate
0    1234 2017-12-05 2017-12-05
1    1234 2017-12-05 2017-12-05
2    4567 2017-12-10 2017-12-11
3    4567 2017-12-11 2017-12-11
Run Code Online (Sandbox Code Playgroud)

'last'根据您的目标

df['MaxDate'] = df.groupby('Account').Date.transform('last')
Run Code Online (Sandbox Code Playgroud)