我有以下df
,如果单元格中有数值,则返回索引值和列名:
A B C
04/04/18 Nan Nan Nan
05/04/19 Nan 4 Nan
06/04/20 Nan Nan 5
输出:
["B-05/04/19","C-06/04/20"]
有没有一种简单的方法可以同时遍历行和列而无需嵌套循环?
答案 0 :(得分:2)
如果对列和索引值进行了排序,请使用stack
和dropna
并在列表理解中最后加入MulitIndex
:
s = df.stack().dropna()
idx = ['{}-{}'.format(b, a) for a, b in s.index]
#python 3.6+
#idx = [f'{b}-{a}' for a, b in s.index]
print (idx)
['B-05/04/19', 'C-06/04/20']
或者获取非NaNs值的索引,获取索引的值并连接在一起:
x, y = np.where(df.notnull())
idx = df.columns[y] + '-' + df.index[x]
print (idx)
Index(['B-05/04/19', 'C-06/04/20'], dtype='object')
答案 1 :(得分:0)
类似于jezrael的解决方案,但使用numpy.argwhere
:
>>> idx = np.argwhere(df.notna().values)
>>> ['{}-{}'.format(df.columns[j], df.index[i]) for i, j in idx]
['B-05/04/19', 'C-06/04/20']