提取列名并在Pandas

时间:2018-05-27 21:25:35

标签: python pandas

我有一个类似下面的pandas数据框:

A  |  B  | C   | D   |  E  |
1  |  2  | 3.5 | 2.3 | 4.0 |

我希望始终提取任何大于2.5的C到E列,并按其值的降序对它们进行排序。

对于上面的例子:

E,C is the output

2 个答案:

答案 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')