【问题标题】:Get the minimum for each data in the data frame获取数据框中每个数据的最小值
【发布时间】:2021-08-30 14:55:42
【问题描述】:

我有这个数据框:

data = {name:  ['a', 'a','b', 'c', 'd', 'b', 'b', 'a', 'c'],
    number: [32, 25, 9 , 43,8, 5, 11, 21, 0]
    }

我想为每个 name 获取 min number,其中该名称的 number 列中的数据不为 0。 对于我的例子,我想要这个结果:

data = {'col1':  ['a', 'b', 'c', 'd'],
    'col2': [21, 5, 43, 8]
    }

我不想要重复的名字。

【问题讨论】:

    标签: python pandas dataframe min pandas-loc


    【解决方案1】:

    IIUC,你可以试试:

    df = df.mask(df.number.eq(0)).dropna().groupby('name', as_index = False).min()
    

    输出:

      name  number
    0    a    21.0
    1    b     5.0
    2    c    43.0
    3    d     8.0
    

    【讨论】:

      【解决方案2】:

      试试sort_values + drop_duplicates

      out = df.loc[df.number!=0].sort_values('number').drop_duplicates('name')
      Out[24]: 
        name  number
      5    b       5
      4    d       8
      7    a      21
      3    c      43
      

      【讨论】:

        【解决方案3】:

        试试:

        df  = df.query('number != 0')
        df.loc[df.groupby('name')['number'].idxmin().tolist()]
        

        输出:

          name  number
        7    a      21
        5    b       5
        3    c      43
        4    d       8
        

        【讨论】:

          【解决方案4】:

          用 groupby 替换:

          df.replace({"number":{0:np.nan}}).groupby("name",as_index=False)['number'].min()
          

            name  number
          0    a    21.0
          1    b     5.0
          2    c    43.0
          3    d     8.0
          

          如果您想使用astype,请将其转换回 int

          【讨论】:

            猜你喜欢
            • 2021-01-17
            • 1970-01-01
            • 2016-04-13
            • 2017-07-30
            • 2023-03-16
            • 2015-05-30
            • 2016-09-10
            相关资源
            最近更新 更多