代码之家  ›  专栏  ›  技术社区  ›  Dervin Thunk

返回与表中的条件匹配的所有列的名称

  •  1
  • Dervin Thunk  · 技术社区  · 6 年前

    我有以下数据帧:

               11NLI        11SEP       14COS       15COS      15NTF
    11NLI   0.000000    98.479289   99.649427   87.732653   0.360731
    11SEP   98.479289   0.000000    15.129470   13.901060   98.469187
    14COS   99.649427   15.129470   0.000000    13.073843   99.694179
    15COS   87.732653   13.901060   13.073843   0.000000    87.756845
    15NTF   0.360731    98.469187   99.694179   87.756845   0.000000
    

    这些是距离。现在,对于每一行,我需要一个字典来存储与距离(单元格值)为<=1.例如(我可能会错过一些,但是),我希望:

    {"11NLI":["11NLI","15NTF"], 
     "11SEP":["11SEP"],
     "14COS":["14COS"],
     "15NTF":["11NLI","15NTF"]}
    

    那么,假设我必须迭代行,如何返回列的名称,条件是值为<=1.也许找排比较好?

    4 回复  |  直到 6 年前
        1
  •  4
  •   ansev    6 年前

    使用:

    (df.where(df.le(1))
       .reset_index()
       .melt('index')
       .dropna()
       .groupby('index')['variable']
       .agg(list).to_dict())
    

    输出

    {'11NLI': ['11NLI', '15NTF'],
     '11SEP': ['11SEP'],
     '14COS': ['14COS'],
     '15COS': ['15COS'],
     '15NTF': ['11NLI', '15NTF']}  
    
        2
  •  2
  •   Umar.H    6 年前

    我们可以使用 melt 和 groupby 具有 query 要符合您的条件:

    df_dict = df.reset_index().melt(id_vars="index").query("value < 1").groupby("variable")[
        "index"
    ].agg(list).to_dict()
    
    
    print(df_dict)
    
    {'11NLI': ['11NLI', '15NTF'],
     '11SEP': ['11SEP'],
     '14COS': ['14COS'],
     '15COS': ['15COS'],
     '15NTF': ['11NLI', '15NTF']}
    
        3
  •  1
  •   BENY    6 年前

    首先创造你的条件,然后我们做 stack 具有 groupby

    s=df.where(df.gt(0)).stack()
    d=s.reset_index().groupby('level_0')['level_1'].agg(list).to_dict()
    d
    Out[151]: 
    {'11NLI': ['11SEP', '14COS', '15COS', '15NTF'],
     '11SEP': ['11NLI', '14COS', '15COS', '15NTF'],
     '14COS': ['11NLI', '11SEP', '15COS', '15NTF'],
     '15COS': ['11NLI', '11SEP', '14COS', '15NTF'],
     '15NTF': ['11NLI', '11SEP', '14COS', '15COS']}