我有一个数据帧,我试图通过减去两列的绝对差值来获得最小值的行,以得到第三列,而我试图获取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
答案 0 :(得分:2)
获取与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)