【问题标题】:Drop duplicates of one column based on value in another column, Python, Pandas根据另一列中的值删除一列的重复项,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 语句来查找最小距离?

【问题讨论】:

    标签: python pandas dataframe duplicates conditional-statements


    【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 2018-12-01
        • 2021-09-12
        • 2023-01-19
        • 2017-07-28
        • 2018-05-27
        • 2021-12-02
        • 2019-10-10
        • 2021-01-08
        • 2020-06-22
        相关资源
        最近更新 更多