获取数据框中每个数据的最小值
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
我有这个数据框:
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