【问题标题】:pandas find row+col names for elements with conditionpandas 查找具有条件的元素的行+列名称
【发布时间】:2018-03-10 20:28:09
【问题描述】:

我有一个熊猫数据框的相关性。我正在搜索数据框以查找大于阈值0.5 的相关性,然后返回与条件匹配的那些元素的列名和行名(均为字符串)。

目前,我可以将相关矩阵转换为大于阈值的值,然后所有其他值都是 NaN 使用这个:

correlations[np.abs(correlations) > 0.5]

现在我有了与我的查询和NaNs 匹配的数字矩阵,我如何获取值不是NaN 的每个元素的行+列名称?

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    我相信您需要Series 中的boolean indexingstack 创建,然后rename_axis 用于新列名称,reset_index 用于来自MultiIndex 的列:

    np.random.seed(456) 
    
    correlations = pd.DataFrame(np.random.rand(5,3), columns=list('ABC'))
    print (correlations)
              A         B         C
    0  0.248756  0.163067  0.783643
    1  0.808523  0.625628  0.604114
    2  0.885702  0.759117  0.181105
    3  0.150169  0.435679  0.385273
    4  0.575710  0.146091  0.686593
    
    s = correlations.stack()
    df = s[np.abs(s) > 0.5].rename_axis(('idx','col')).reset_index(name='val')
    print (df)
       idx col       val
    0    0   C  0.783643
    1    1   A  0.808523
    2    1   B  0.625628
    3    1   C  0.604114
    4    2   A  0.885702
    5    2   B  0.759117
    6    4   A  0.575710
    7    4   C  0.686593
    

    详情

    print (s)
    0  A    0.248756
       B    0.163067
       C    0.783643
    1  A    0.808523
       B    0.625628
       C    0.604114
    2  A    0.885702
       B    0.759117
       C    0.181105
    3  A    0.150169
       B    0.435679
       C    0.385273
    4  A    0.575710
       B    0.146091
       C    0.686593
    dtype: float64
    

    【讨论】:

      【解决方案2】:

      或者你可以使用melt

      correlations.where(correlations.abs().gt(0.5)).reset_index().melt('index').dropna()
      Out[357]: 
          index variable     value
      1       1        A  0.808523
      2       2        A  0.885702
      4       4        A  0.575710
      6       1        B  0.625628
      7       2        B  0.759117
      10      0        C  0.783643
      11      1        C  0.604114
      14      4        C  0.686593
      

      【讨论】:

        猜你喜欢
        • 2016-09-17
        • 2021-10-06
        • 1970-01-01
        • 2018-07-30
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多