【问题标题】:Python - Drop duplicate based on max value of a columnPython - 根据列的最大值删除重复项
【发布时间】:2017-02-16 07:21:38
【问题描述】:

我不太擅长 pandas,我认为 pandas 应该可以解决我的问题: 我有一个包含数据的文本文件 (id1;id2;value1;value2;value3)

1;2;30;40;20.3;
1;2;30;42;26.2;
3;5;12;55;10.7;
3;5;12;23;8.7;
3;5;12;33;11.2;
24;12;1;553;1.1;
24;12;1;23;1.9;

因此,我想保留等于id1id2value1 和更高value3 的行。 Value2 不重要,但需要保留,例如

1;2;30;42;26.2;
3;5;12;33;11.2;
24;12;1;23;1.9; 

【问题讨论】:

    标签: python sorting pandas group-by max


    【解决方案1】:

    对于最大值为value3 的索引,您需要DataFrameGroupBy.idxmax,然后通过loc 选择DataFrame

    print (df.groupby(['id1','id2','value1']).value3.idxmax())
    id1  id2  value1
    1    2    30        1
    3    5    12        4
    24   12   1         6
    Name: value3, dtype: int64
    
    df = df.loc[df.groupby(['id1','id2','value1']).value3.idxmax()]
    print (df)
       id1  id2  value1  value2  value3   a
    1    1    2      30      42    26.2 NaN
    4    3    5      12      33    11.2 NaN
    6   24   12       1      23     1.9 NaN
    

    另一种可能的解决方案是 sort_values 按列 value3 然后 groupbyGroupBy.first

    df = df.sort_values('value3', ascending=False)
           .groupby(['id1','id2','value1'], sort=False)
           .first()
           .reset_index()
    print (df)
       id1  id2  value1  value2  value3   a
    0    1    2      30      42    26.2 NaN
    1    3    5      12      33    11.2 NaN
    2   24   12       1      23     1.9 NaN
    

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      相关资源
      最近更新 更多