Python:转换为列标题的二维列表,而行值不是NaN

Python:转换为列标题的二维列表,而行值不是NaN,python,pandas,select,dataframe,Python,Pandas,Select,Dataframe,我有一个基于行的列的示例数据,这些列是在滚动窗口中计算的,因此是浮动的: import pandas as pd df = pd.DataFrame(data={'X': [1.5, 6.777, 2.444, pd.np.NaN], 'Y': [1.111, pd.np.NaN, 8.77, pd.np.NaN], 'Z': [5.0, 2.333, 10, 6.6666]}) Out[8]: X Y Z 0 1.500 1.111 5.00

我有一个基于行的列的示例数据,这些列是在滚动窗口中计算的,因此是浮动的:

import pandas as pd
df = pd.DataFrame(data={'X': [1.5, 6.777, 2.444, pd.np.NaN], 'Y': [1.111, pd.np.NaN, 8.77, pd.np.NaN], 'Z': [5.0, 2.333, 10, 6.6666]})


Out[8]: 
       X      Y        Z
0  1.500  1.111   5.0000
1  6.777    NaN   2.3330
2  2.444  8.770  10.0000
3    NaN    NaN   6.6666
我想把它转换成一个不带NaN的按行2D列表,而不是实值,我想提取列名;按等级排序

期望输出:

[[Y, X, Z], [Z, X], [X, Y, Z], [z]]
此外,我还需要第二个输出,其中选择了最大数量的值,以按排序的秩获取。例如,要选择最多2个条目,这将产生:

[[Y, X], [Z, X], [X, Y], [z]]
不知道这是否也是在熊猫身上优雅地完成的。如果没有,不用担心,我可以使用基于输出1的listcomprehension轻松完成,使用如下内容:

 limited = [x[:2] if len(x) > 2 else x for x in OUTPUT_STEP_1]

您可以将列表理解与或
转置
数据帧一起使用,分别处理每一行

首先,通过删除NAN并将
索引
获取到
列表
(列转换为索引,因为每行都转换为
系列

对于仅选择第一个和第二个值添加
[]

L = [ x.sort_values().dropna().index.tolist() for idx, x in df.iterrows()]
print (L)
[['Y', 'X', 'Z'], ['Z', 'X'], ['X', 'Y', 'Z'], ['Z']]

L1 = [ x.sort_values().dropna().index[:2].tolist() for idx, x in df.iterrows()]
print (L1)
[['Y', 'X'], ['Z', 'X'], ['X', 'Y'], ['Z']]


我只能同意这一点。非常好。
df1 = df.T
L = [ df1[x].sort_values().dropna().index.tolist() for x in df1]
print (L)
[['Y', 'X', 'Z'], ['Z', 'X'], ['X', 'Y', 'Z'], ['Z']]

L1 = [ df1[x].sort_values().dropna().index[:2].tolist() for x in df1]
print (L1)
[['Y', 'X'], ['Z', 'X'], ['X', 'Y'], ['Z']]