我有一个DataFrame,我希望将DataFrame的最大值和第二最大值之间的差作为新列附加到DataFrame作为输出.
例如,数据框如下所示(这是一个巨大的DataFrame):
gene_id Time_1 Time_2 Time_3
a 0.01489251 8.00246 8.164309
b 6.67943235 0.8832114 1.048761
largest = max(df)
second_largest = max(item for item in df if item < largest)
并单独返回标头值.
解决方法:
您可以定义一个函数,该函数接受这些值,对其进行排序,对前两个值进行切片([:2]),然后计算差值并返回第二个值(因为第一个值为NaN).您可以应用此参数并传递arg axis = 1以逐行应用:
In [195]:
def func(x):
return -x.sort(inplace=False, ascending=False)[:2].diff()[1]
df['diff'] = df.loc[:,'Time_1':].apply(func, axis=1)
df
Out[195]:
gene_id Time_1 Time_2 Time_3 diff
0 a 0.014893 8.002460 8.164309 0.161849
1 b 6.679432 0.883211 1.048761 5.630671