如何在数据框

时间:2019-12-30 06:13:29

标签: python pandas dataframe

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

1 个答案:

答案 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)