python - 删除多列上的重复项
问题描述
我想根据日期删除数据框中的重复项,保持最新日期并确保返回的行也考虑到 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”值。
我怎样才能做到这一点?
解决方案
使用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)
推荐阅读
- android - 在android中使用接口扩展一个具有多个活动的类
- html - 外部 div 在里面修改时搞砸了
- amazon-web-services - 我可以垂直扩展 Amazon 实例吗?
- c# - .NET Core 2.1 基于 .NET 套接字和 Span 的新 HttpClient
. 好像有问题 - regex - 如何用显式“\n”替换单元格中的换行符?
- python - 如何改进解析 lz4 压缩 json 的方法?
- java - Java Stream 有状态 findFirst
- ruby-on-rails - 无法通过多对多关联查询父级 - Rails
- cassandra - 如何在 Cassandra 中可视化原子性?
- java - 使用休眠连接构建独立的 Spring Boot 应用程序