以下面的示例为例,DF
是如何获得带有arent nan的值的索引和列名的列表?
es ms hs
subdist_id
1 NaN NaN NaN
2 NaN NaN NaN
3 -0.218066 NaN -0.309002
4 NaN NaN NaN
5 NaN NaN NaN
6 NaN NaN NaN
7 NaN NaN NaN
9 NaN NaN NaN
10 NaN NaN NaN
11 -0.385217 NaN NaN
这样我可以获得列表[[3,'es]', [3,'hs'], [11,'es']]
答案 0 :(得分:3)
使用DataFrame.stack
来删除NaN,并将MultiIndex转换为元组列表,然后将其转换为列表列表:
L = list(map(list, df.stack().index.tolist()))
print (L)
[[3, 'es'], [3, 'hs'], [11, 'es']]
替代:
L = [list(x) for x in df.stack().index.tolist()]
print (L)
[[3, 'es'], [3, 'hs'], [11, 'es']]
如果需要性能,请按DataFrame.isna
和numpy.where
按条件获取索引,并按zip获取带有索引的列和索引值的值:
i,c = np.where(df.notna())
L = list(map(list, zip(df.index[i],df.columns[c])))
print (L)
[[3, 'es'], [3, 'hs'], [11, 'es']]
i,c = np.where(df.notna())
L = [list(x) for x in zip(df.index[i],df.columns[c])]