如何轻松地同时遍历行和列?

时间:2019-01-09 12:17:33

标签: python pandas

我有以下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"]

有没有一种简单的方法可以同时遍历行和列而无需嵌套循环?

2 个答案:

答案 0 :(得分:2)

如果对列和索引值进行了排序,请使用stackdropna并在列表理解中最后加入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']