根据条件获取索引和列

时间:2019-03-29 20:20:25

标签: python pandas

以下面的示例为例,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']]

1 个答案:

答案 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.isnanumpy.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])]