【问题标题】:How to find min value of grouped data on column A and min of the other column B when duplicate values exist on A当A上存在重复值时,如何找到A列上分组数据的最小值和另一列B的最小值
【发布时间】:2019-06-10 03:37:12
【问题描述】:

我正在尝试使用 Pandas 分析数据框。我的问题与问题类似:

How to get rows with min values in one column, grouped by other column, while keeping other columns?

除了那个问题(这对我来说非常重要),如果分组列有多个最小值,我还需要找到其他列的最小值。如果没有,我需要查看对应的值。

这是一个基本的例子;

df = pd.DataFrame({'id' : [1,1,1,2,2],
                   'A' : [8,6,6,8,9],
                   'B' : [1,2,4,5,4]})

当此数据帧按“id”分组并聚合(首先在“A”上,然后在“B”上)时,这是我想看到的输出:

id  A   B   
1   6   2
2   8   5

请注意,当 id 为 1 时,列 'A' 有多个具有最小值的行。对应的 'B' 列值为 2 和 4。因此,它们的最小值作为 ' 的结果返回B' 列。

我不知道R,所以,我不明白上面链接的答案。无论如何,这是一个不同的版本。

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    IIUC,按B排序后使用idxmin


    df.loc[df.sort_values('B').groupby('id')['A'].idxmin()]
    

       id  A  B
    1   1  6  2
    3   2  8  5
    

    【讨论】:

      【解决方案2】:

      另一种方法是默认利用groupby 排序group_keys。因此,groupby 'id, A' 将每 ID 的最小 A 组推到顶部。之后,在Breset_indexdrop_duplicate 上致电min

      df.groupby(['id', 'A'])['B'].min().reset_index().drop_duplicates(subset='id')
      
      
      Out[298]:
         id  A  B
      0   1  6  2
      2   2  8  5
      

      【讨论】:

        猜你喜欢
        • 2017-06-05
        • 2014-04-18
        • 1970-01-01
        • 2016-05-14
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        相关资源
        最近更新 更多