我有一个数据框,我在其中试图通过减去两列的绝对差值来获得最小值的行,以得到第三列,在这里我试图获取col [3]数据框的第一或第二最小值我得到一个错误。有没有更好的方法从一列[3]中获取最小值行。
df2 = df[[2,3]]
df2[4] = np.absolute(df[2] - df[3])
#lowest = df.iloc[df[6].min()]
2 3 4
0 -111 -104 7
1 -130 110 240
2 -105 -112 7
3 -118 -100 18
4 -147 123 270
5 225 -278 503
6 102 -122 224
2 3 4
预期结果= 2 -105 -112 7
得到差异Series
,相加Series.abs
,然后按最小值进行比较boolean indexing
:
s = (df[2] - df[3]).abs()
df = df[s == s.min()]
如果需要新列作为差异:
df['diff'] = (df[2] - df[3]).abs()
df = df[df['diff'] == df['diff'].min()]
另一个想法是,按最小值获取索引Series.idxmin
,然后按选择DataFrame.loc
,因为必须有一行DataFrame [[]]
:
s = (df[2] - df[3]).abs()
df = df.loc[[s.idxmin()]]
编辑:
有关更多可能转换为整数的动态代码,请使用:
def int_if_possible(x):
try:
return x.astype(int)
except Exception:
return x
df = df.apply(int_if_possible)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句