我有一个类似下面的pandas数据框:
A | B | C | D | E |
1 | 2 | 3.5 | 2.3 | 4.0 |
我希望始终提取任何大于2.5的C到E列,并按其值的降序对它们进行排序。
对于上面的例子:
E,C is the output
答案 0 :(得分:2)
transpose
+ sort_values
v = df.T.squeeze().loc['C':'E'].sort_values(ascending=False)
v.index[v.gt(2.5)].tolist()
['E', 'C']
stack
+ sort_values
v = (
df.stack()
.reset_index(level=0, drop=True)
.loc['C':'E']
.sort_values(ascending=False)
)
v.index[v.gt(2.5)].tolist()
['E', 'C']
答案 1 :(得分:1)
一种方法是通过pd.DataFrame.columns.get_loc
提取所需列的值。然后过滤并使用pd.Series.index
:
vals = df.iloc[0, df.columns.get_loc('C'):] # or df.loc[0, 'C':]
res = vals[vals > 2.5].sort_values(ascending=False).index
print(res)
Index(['E', 'C'], dtype='object')