首页 > 解决方案 > 删除多列上的重复项

问题描述

我想根据日期删除数据框中的重复项,保持最新日期并确保返回的行也考虑到 Country 中的每个值。用一个示例df来说明:

样本df

State   Country   Date          X1     X2     X3
A       AA        2021-01-01    8.0    5.0    0.0 
A       AA        2021-01-01    0.0    1.0    0.0
B       BB        2021-01-01    0.0    10.0   0.0 
X       XX        2021-01-01    0.0    0.0    0.0 

       

我的代码

df1 = df.drop_duplicates(subset=['Date'], keep = 'last')
df1

这为我提供了仅返回最后一行Country(XX)的输出。虽然这是正确的,但我还希望代码考虑 Country 列并给我每个国家/地区的最新日期(即第 2 到第 4 行)。输出还应该将“状态”列作为所有“0”值。

我怎样才能做到这一点?

标签: pythonpandasdataframe

解决方案


使用groupbyapply

def fetch_latest_data(df):
    return df.drop_duplicates(subset=['Date'], keep = 'last')
df  = df.groupby('Country').apply(fetch_latest_data).reset_index(drop=True)

更好的选择是使用tail-

df = df.groupby(['Country','Date']).tail(1)

推荐阅读