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']]