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

是否可以基于索引和列名合并两个数据帧?

  •  2
  • Andrey  · 技术社区  · 4 年前

    我有两个数据帧:

    left = pd.DataFrame(
            {
                "Col": ["D", "C", "B", "A"],
            },
            index=[0, 1, 2, 3],
        )
    right = pd.DataFrame(
            {
                "A": ["A0", "A1", "A2", "A3"],
                "B": ["B0", "B1", "B2", "B3"],
                "C": ["C0", "C1", "C2", "C3"],
                "D": ["D0", "D1", "D2", "D3"],
            },
            index=[0, 1, 2, 3],
        )
    

    col 左边和右边的列名?

    result = pd.DataFrame(
            {
                "Col": ["D", "C", "B", "A"],
                "Val": ["D0", "C1", "B2", "A3"],
            },
        )
    
    2 回复  |  直到 4 年前
        1
  •  3
  •   BENY    4 年前

    尝试

    left['new'] = right.values[np.arange(len(left)), right.columns.get_indexer(left.Col)]
    left
    Out[129]: 
      Col new
    0   D  D0
    1   C  C1
    2   B  B2
    3   A  A3
    

    lookup 但它不赞成,上面是一个替代方案 查找 numpy

    index : 努比 没有索引,所以我们需要通过正确的位置传递值,大部分时间索引与位置相同但可能会不同 彼此也是。

        2
  •  2
  •   Andrej Kesely    4 年前

    另一种解决方案:

    left["new"] = right.apply(lambda x: x[left.loc[x.name, "Col"]], axis=1)
    print(left)
    

      Col new
    0   D  D0
    1   C  C1
    2   B  B2
    3   A  A3