在数据框中减去两个值

时间:2020-09-10 10:47:30

标签: python pandas dataframe

我有一个数据帧(df),其中有2列,名称为[1,2],我使用以下代码添加了另外2列:最大和第二个最大的列,每行显示的是最大的列,第二高。

    df = RSRP_per_sec(2)
    df2=df.copy()
    df2['highest']=0
    df2['second_highest']=0
    for i in range(len(df)):
        l=sorted([(x, df.iloc[i][x]) for x in df.columns], key=lambda y: y[1])
        df2['highest'].iloc[i]=l[-1][0]
        df2['second_highest'].iloc[i]=l[-2][0]

现在df数据帧是这样的,其中列为['1','2','highest','second_highest']并显示第一行:

1        2       highest    second_highest

-86     -102      1           2

现在,我想再增加一列,通过在每一行中检查哪一列是最高列,哪一列是第二列并将它们彼此相减来计算最高和第二高之间的差。

注意:对于我来说,这很容易,因为只有两列要减去,但是我想扩大列数,使最高和第二高的列具有不同的值。

1 个答案:

答案 0 :(得分:0)

获取列值,并使用它们为相应的列建立索引:

df["diff_highest"] = df[str(df["highest"].values[0])] - df[str(df["second_highest"].values[0])]

此外,您还可以通过对每行使用.sort_values()获得两个最大值:

df["1"] = [-86]
df["2"] = [-102]
df["3"] = [12]
df["highest"] = [None]
df["second_highest"] = [None]

df.iloc[0].sort_values(ascending=False).dropna().index[:2]

输出

Index(['3', '1'], dtype='object')

我建议将“最高”和“第二最高”设置为“无”,以免与排序产生冲突。