我到处寻找这个肯定存在的答案。我正在尝试在数据帧中找到每行最小的正整数。
想象一个数据框架
'lat':[-120, -90, -100, -100],
'long':[20, 21, 19, 18],
'dist1':[2, 6, 8, 1],
'dist2':[1,3,10,5]}```
以下函数给我最小值,但包括底片。即df['lat']列。
df.min(axis = 1)
显然,我可以删除最后一列,或者转换为字符串或其他东西,但我稍后将需要它。最后一列是唯一具有负值的列。我试图返回一个新列,如
df['min_dist'] = [1,3,8,1]
我希望这一切都有意义。谢谢你的帮助。
一般情况下,您可以使用DataFrame.where
将负值标记为null并将其从min
计算中排除:
df['min_dist'] = df.where(df > 0).min(1)
df
lat long dist1 dist2 min_dist
0 -120 20 2 1 1.0
1 -90 21 6 3 3.0
2 -100 19 8 10 8.0
3 -100 18 1 5 1.0
仅筛选dist
列并应用最小函数:
df.assign(min_dist = df.iloc[:, -2:].min(1))
Out[205]:
lat long dist1 dist2 min_dist
0 -120 20 2 1 1
1 -90 21 6 3 3
2 -100 19 8 10 8
3 -100 18 1 5 1
直接使用:
df['min_dist'] = df[df > 0].min(1)