代码之家  ›  专栏  ›  技术社区  ›  JamesHudson81

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

  •  2
  • JamesHudson81  · 技术社区  · 5 年前

    我有以下内容 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 回复  |  直到 5 年前
        1
  •  2
  •   jezrael    5 年前

    如果列和索引值已排序,请使用 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')
    
        2
  •  0
  •   timgeb    5 年前

    类似于耶斯拉利的解决方案,但是 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']