我想根据日期删除数据框中的重复项,保留最新日期并确保返回的行也考虑到 Country 中的每个值。用示例 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 行)。输出还应将 'State' 列设为全为 '0' 值。
我怎样才能做到这一点?
答案 0 :(得分:0)
使用 groupby
和 apply
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)