获取数据框中每个数据的最小值

Get the minimum for each data in the data frame

我有这个数据框:

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

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

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

我不想要重复的名字。

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

试试 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

尝试:

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

替换为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