根据条件获取索引和列

2024-05-03 15:51:39 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个DF作为下面的例子,我怎样才能得到索引和列名都不是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']]


Tags: iddf列表esnan例子mshs
1条回答
网友
1楼 · 发布于 2024-05-03 15:51:39

使用^{}删除带有convert MultiIndex to list of tuples的nan,然后将其转换为list of list:

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

如果需要性能,请通过^{}^{}按条件获取索引,并通过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])]

相关问题 更多 >