【问题标题】:Generating a dynamic matrix from reference table从参考表生成动态矩阵
【发布时间】:2021-12-17 04:09:31
【问题描述】:

我有以下参考

corr = pd.DataFrame({'i':['a','b'],'a':[.1,.2],'b':[.2,.1]}).set_index('i')

我也有一些向量值。长度总是会改变,所以我只使用 6 来展示我想要实现的目标。

vectors = pd.DataFrame({'val':['a','b','a','a','b']})

我想使用这些值生成一个 5x5 矩阵“X”,这样:

5x5 因为向量 len(vector) = 5

我能想到的最接近的是 map 函数,它只生成一列。

【问题讨论】:

    标签: python pandas numpy matrix


    【解决方案1】:

    DataFrame.reindex 两次,一次用于列,一次用于行:

    out = corr.reindex(vectors['val']).reindex(vectors['val'], axis=1)
    

    请注意,虽然受支持,但不建议使用重复的列名。例如out['a'] 会返回一个数据帧,而大多数情况下它会返回一个系列。

    【讨论】:

    • df 在这种情况下会是什么?
    • @RealRageDontQuit 已更新。肌肉记忆df 用于通用数据框。
    • 我添加了重新索引的链接。如果不正常,请随时恢复更改。我同意不推荐重复的列。我想不出一个用例。
    【解决方案2】:

    我们可以使用DataFrame.reindex 并同时使用indexcolumns 参数和vectors["val"]

    idx = vectors["val"] # vectors["val"].tolist() to avoid naming axes `val`.
    corr.reindex(index=idx, columns=idx)
    
    val    a    b    a    a    a    b
    val                              
    a    0.1  0.2  0.1  0.1  0.1  0.2
    b    0.2  0.1  0.2  0.2  0.2  0.1
    a    0.1  0.2  0.1  0.1  0.1  0.2
    a    0.1  0.2  0.1  0.1  0.1  0.2
    a    0.1  0.2  0.1  0.1  0.1  0.2
    b    0.2  0.1  0.2  0.2  0.2  0.1
    

    【讨论】:

      【解决方案3】:

      DataFrame.reindex 两次,一次用于列,一次用于行:

      out = corr.reindex(vectors['val']).reindex(vectors['val'], axis=1)

      虽然支持列名重复,但不推荐使用

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 2016-10-19
      • 2018-06-03
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多