根据另一列中的值删除一列的重复项,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

怎么去除datatable 中一列的重复值【急】

如何根据 PySpark 数据框的另一列中的值修改列? F.当边缘情况

根据另一列中的值从一列中减去值(SQL)

怎么去除datatable 中一列的重复值【急】

如何根据另一列的值获取单行值?