我有一个数据帧(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
现在,我想再增加一列,通过在每一行中检查哪一列是最高列,哪一列是第二列并将它们彼此相减来计算最高和第二高之间的差。
注意:对于我来说,这很容易,因为只有两列要减去,但是我想扩大列数,使最高和第二高的列具有不同的值。
答案 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')
我建议将“最高”和“第二最高”设置为“无”,以免与排序产生冲突。