Date Pandas-确定数据帧中每个帐户的最大日期
我有一个示例数据帧:Date Pandas-确定数据帧中每个帐户的最大日期,date,pandas,dataframe,max,Date,Pandas,Dataframe,Max,我有一个示例数据帧: 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
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
我想添加一个名为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
我不确定是否应该在数据帧上迭代,还是?请注意,数据集可以是一百万行,因此性能是一个考虑因素。感谢您的指导
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
或“最后一次”
,取决于您的目标
df['MaxDate'] = df.groupby('Account').Date.transform('last')
因为@MaxU的回答太快了,所以这里有一些选择
df.join(df.groupby('Account').Date.max().rename('MaxDate'), on='Account')
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
或者以另一种方式
df.assign(MaxDate=df.Account.map(df.groupby('Account').Date.max()))
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
你很快。我在一个更大的数据集上尝试了这个方法,效果很好。谢谢,谢谢你的选择。这些会放进我的工具箱。