Pandas:按列值删除准重复

2024-04-24 00:32:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,比如说,看起来像这样(我把它放进DF中):

[
['john', '1', '1', '2016'],
['john', '1', '10', '2016'],
['sally', '3', '5', '2016'],
['sally', '4', '1', '2016']
]

columns['name', 'month', 'day', 'year']

我基本上是想输出一个新的DF,每个人只有最旧的一行。所以它应该包含两行,一行是16年1月1日的john,一行是16年3月5日的sally。你知道吗

我一直很难在DF的内部进行这种选择,希望有人能提供一些关于如何实现上述目标的建议。你知道吗


Tags: columnsname目标df列表johnyear建议
2条回答

您可以按year, month, day对数据帧排序,然后从每个name中选取第一行:

df.sort_values(by = ['year', 'month', 'day']).groupby('name').first()

#   month   day year
# name          
# john  1   1   2016
#sally  3   5   2016

数据:

df = pd.DataFrame([['john', '1', '1', '2016'],
                   ['john', '1', '10', '2016'],
                   ['sally', '3', '5', '2016'],
                   ['sally', '4', '1', '2016']], 
                   columns = ['name', 'month', 'day', 'year'])

选项1 使用pd.to_datetime解析['year'、'month'、'day']列。
groupby('name')然后采取first

df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
df.sort_values(['name', 'date']).groupby('name').first()

enter image description here

选项2
相同的pd.to_datetime用法。
groupby('name')使用idxmin查找最小日期。你知道吗

df['date'] = pd.to_datetime(df[['year', 'month', 'day']])
df.ix[df.groupby('name').date.idxmin()]

enter image description here

相关问题 更多 >