Python 在数据帧中减去两个值

Python 在数据帧中减去两个值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个名为[1,2]的dataframe(df)有两列,我使用下面的代码添加了另外两列:最大和第二大列,显示在每行中,这两列是最大的数字,第二大 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.column

我有一个名为[1,2]的dataframe(df)有两列,我使用下面的代码添加了另外两列:最大和第二大列,显示在每行中,这两列是最大的数字,第二大

    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 dataframe是这样的,其中列是['1','2','highest','second_highest'],并显示第一行:

1        2       highest    second_highest

-86     -102      1           2
现在,我想再添加一列,通过在每一行检查哪一列是最高的,哪一列是第二列,并将它们相互减去,来计算最高和第二高之间的差异


注意:对于我的情况,现在很容易,因为只有2列要减去,但我想扩大列数,最高和第二高的列将具有不同的值。

获取列值并使用它们索引相应的列:

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')
我建议将“highest”和“second_highest”设置为None,这样就不会与排序冲突