根据另一列中的值删除一列的重复项,Python,Pandas
Posted
技术标签:
【中文标题】根据另一列中的值删除一列的重复项,Python,Pandas【英文标题】:Drop duplicates of one column based on value in another column, Python, Pandas 【发布时间】:2017-12-17 00:02:24 【问题描述】:我有一个这样的数据框:
Date PlumeO Distance
2014-08-13 13:48:00 754.447905 5.844577
2014-08-13 13:48:00 754.447905 6.888653
2014-08-13 13:48:00 754.447905 6.938860
2014-08-13 13:48:00 754.447905 6.977284
2014-08-13 13:48:00 754.447905 6.946430
2014-08-13 13:48:00 754.447905 6.345506
2014-08-13 13:48:00 754.447905 6.133567
2014-08-13 13:48:00 754.447905 5.846046
2014-08-13 16:59:00 754.447905 6.345506
2014-08-13 16:59:00 754.447905 6.694847
2014-08-13 16:59:00 754.447905 5.846046
2014-08-13 16:59:00 754.447905 6.977284
2014-08-13 16:59:00 754.447905 6.938860
2014-08-13 16:59:00 754.447905 5.844577
2014-08-13 16:59:00 754.447905 6.888653
2014-08-13 16:59:00 754.447905 6.133567
2014-08-13 16:59:00 754.447905 6.946430
我试图以最小的距离保持日期,所以删除重复的日期并保持最小的距离。
有没有办法在 pandas 的 df.drop_duplicates
中实现这一点,或者我是否坚持使用 if 语句来查找最小距离?
【问题讨论】:
【参考方案1】:按距离排序并按日期删除:
df.sort_values('Distance').drop_duplicates(subset='Date', keep='first')
Out:
Date PlumeO Distance
0 2014-08-13 13:48:00 754.447905 5.844577
13 2014-08-13 16:59:00 754.447905 5.844577
【讨论】:
尽管必须排序,但这个答案也非常快(-:【参考方案2】:这些方法的优点是不需要排序。
选项 1
您可以使用idxmin
标识最小值的索引值,并且可以在groupby
中使用它。使用这些结果对您的数据框进行切片。
df.loc[df.groupby('Date').Distance.idxmin()]
Date PlumeO Distance
0 2014-08-13 13:48:00 754.447905 5.844577
13 2014-08-13 16:59:00 754.447905 5.844577
选项 2
您可以使用pd.DataFrame.nsmallest
返回与最小距离关联的行。
df.groupby('Date', group_keys=False).apply(
pd.DataFrame.nsmallest, n=1, columns='Distance'
)
Date PlumeO Distance
0 2014-08-13 13:48:00 754.447905 5.844577
13 2014-08-13 16:59:00 754.447905 5.844577
【讨论】:
【参考方案3】:我会说先对数据进行排序,然后删除重复的日期:
stripped_data = df.sort_values('distance').drop_duplicates('date', keep='first')
【讨论】:
以上是关于根据另一列中的值删除一列的重复项,Python,Pandas的主要内容,如果未能解决你的问题,请参考以下文章
Google BigQuery - 根据另一列中的值减去一列的 SUM