Pandas group by位于一列上,而max date位于另一列上

我有一个包含以下数据的数据框:

发票\u无经销商账单\u变更\u上月日期
110       1                              0  2016-12-31
100       1                         -41981  2017-01-30
5505       2                              0  2017-01-30
5635       2                          58730  2016-12-31

我只希望有一个经销商的最长日期。所需的输出应如下所示:

发票\u无经销商账单\u变更\u上月日期
100       1                         -41981  2017-01-30
5505       2                              0  2017-01-30

每个经销商应具有不同的最长日期,
提前感谢你的帮助

可以使用groupby和transform使用布尔索引

df_new=df[df.groupby('dealer').date.transform('max')==df['date']
发票\u无经销商账单\u变更\u上月日期
1   100         1       -41981                          2017-01-30
2   5505        2       0                               2017-01-30

即使有两个以上的经销商(解决Ben Smith提出的问题),该解决方案也能按预期工作

df=pd.DataFrame({‘发票编号’:[11010055055635100000001],‘经销商’:[1,1,2,2,3,3],‘账单变更’:[0,-41981,0587309000100],‘日期’:[2016-12-31','2017-01-30','2017-01-30','2016-12-31','2019-12-31','2020-01-31']
df['date']=pd.to_datetime(df['date'])
df[df.groupby('dealer').date.transform('max')==df['date']]
发票\u无经销商账单\u变更\u上月日期
1   100         1       -41981                          2017-01-30
2   5505        2       0                               2017-01-30
5   10001       3       100                             2020-01-31

发表评论