删除 pandas 数据框的重复数据并获取最新记录
De-duplicating a pandas data frame and taking the newest record
我有一个包含重复项和更新日期的数据框。开始日期:
我正在寻找的是一种删除重复项并获取最新记录的方法。我知道 drop_duplicates() 但这只会删除 100% 相同的行。所以所需的输出看起来像:
我试过这样的事情:
grouped = df.groupby(['First Name', 'Middle Name','Last Name','Job Title','Active','Contractor'])
new_data = grouped['Update Date'].agg(np.max).to_frame().reset_index()
但是必须有比按每一列分组然后取更新日期的最大值更好的方法来执行此操作。
如果我想按某些列分组,并采用最大更新日期怎么办?但也采用其他未分组的列。
例如按名字、中间名和姓氏分组,并且仍然采用最新记录的整个记录。
输入:
期望的输出。
谢谢!
尽管有我的评论,您可以先对整个数据框进行排序,然后取每组的第一行。
df = df.sort_values('Update Date', ascending=False)
df.groupby(['First Name', 'Middle Name','Last Name']).first().reset_index()
drop_duplicates
接受一个 subset
参数:
ident_fields = ['First Name', 'Middle Name','Last Name']
df = (df.sort_values('Update Date')
.drop_duplicates(subset=ident_fields, keep='last'))
我有一个包含重复项和更新日期的数据框。开始日期:
我正在寻找的是一种删除重复项并获取最新记录的方法。我知道 drop_duplicates() 但这只会删除 100% 相同的行。所以所需的输出看起来像:
我试过这样的事情:
grouped = df.groupby(['First Name', 'Middle Name','Last Name','Job Title','Active','Contractor'])
new_data = grouped['Update Date'].agg(np.max).to_frame().reset_index()
但是必须有比按每一列分组然后取更新日期的最大值更好的方法来执行此操作。 如果我想按某些列分组,并采用最大更新日期怎么办?但也采用其他未分组的列。
例如按名字、中间名和姓氏分组,并且仍然采用最新记录的整个记录。
输入:
期望的输出。
谢谢!
尽管有我的评论,您可以先对整个数据框进行排序,然后取每组的第一行。
df = df.sort_values('Update Date', ascending=False)
df.groupby(['First Name', 'Middle Name','Last Name']).first().reset_index()
drop_duplicates
接受一个 subset
参数:
ident_fields = ['First Name', 'Middle Name','Last Name']
df = (df.sort_values('Update Date')
.drop_duplicates(subset=ident_fields, keep='last'))