【问题标题】:Converting a list of triplets (row, column, value) to matrix as pandas df将三元组(行、列、值)列表转换为 pandas df 的矩阵
【发布时间】:2022-11-16 02:30:42
【问题描述】:

我的问题类似于this one,但还是有区别的。 我有一个如下所示的三元组列表,用它们的单元格值表示矩阵的行和列:

a  = [("g1","g2",7),("g1","g3",5)]

矩阵是对称的,因此可以按任何顺序提供元素——这意味着("g1","g2",7) 将暗示("g2","g1",7)

我想从此列表中获取一个 pandas df,表示一个矩阵,该矩阵在行和列上具有元素名称,如果 a 中未列出三元组,则缺少值:

    g1    g2    g3
g1  NaN   7     5
g2  7     NaN   Nan
g3  5     NaN   Nan

你能帮我以最有效的方式完成这个任务吗?

【问题讨论】:

    标签: python arrays pandas sparse-matrix


    【解决方案1】:

    也许不是所有解决方案中最优雅的,但它可以完成工作。 对于您的列表,请确定您拥有的所有“标签”(例如,g1、g2、....gn)。

    import numpy as np
    import pandas as pd
    a  = (("g1","g2",7),("g1","g3",5))
    tags = []
    for t1, t2, _ in a:
        tags += [t1, t2]
    tags = index = columns = sorted(list(set(tags)))
    

    完成后,将它们放入列表中

    tags = dict((t, i) for i, t in enumerate(tags))
    
    

    创建该列表维度的空表,将所有 0 值替换为 nan,然后替换与正确标签对应的 nan 值并将其放入数据框

    Table = np.empty((len(tags),len(tags)))
    Table[:] = np.nan
    for t1, t2, corr in a:
        Table[tags[t1]][tags[t2]] = corr
        Table[tags[t2]][tags[t1]] = corr
    
    df = pd.DataFrame(Table, index=index, columns=columns)
    
    

    返回

         g1   g2   g3
    g1  NaN  7.0  5.0
    g2  7.0  NaN  NaN
    g3  5.0  NaN  NaN
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 2015-04-30
      • 1970-01-01
      • 2021-11-03
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多