Pandas - 合并两个索引名称不同但列数相同的数据框

Pandas - Merging Two Data frames with different index names but same amount of Columns

我正在尝试将两个 Pandas 数据框合并在一起,但无法获得所需的结果。一个数据框已被转置,因此我认为有一个包含列索引的 header 行。另一个有一个包含列名的 header 行,但是每行都有相同的列数。

数据帧 1 (DF1):

+-----------------------------------------------------+
|      NAME      RD1     RD2     RD3     RD4     RD5  |
+-----------------------------------------------------+
| 0     Tom      4       2       1       -       3    |
| 1     Mark     2       2       3       2       1    |
| 2     James    -       1       5       5       4    |
| ...   ...      ...     ...     ...     ...     ...  |
| 30    Ted      2       3       3       3       2    |
+-----------------------------------------------------+

数据帧 2 (DF2)

+--------------------------------------------------------------------+
|       0      1          2          3          4          5         |
+--------------------------------------------------------------------+
| 0     Desc   Round 1    Round 2    Round 3    Round 4    Round 5   |
| 1     Opp    Hawks      Dolphins   Raptors    Sharks     Bears     |
| 2     Date   02/04      08/04      16/04      24/04      30/04     |
| 3     Venue  MELB       PERTH      MELB       SYD        MELB      |
+--------------------------------------------------------------------+

我尝试使用多种 pandas 方法(连接/追加/合并/连接)连接两个数据框而不添加任何列。但是,每种方法似乎都将列和行加在一起。我希望能够进行内部联接,但我似乎可以找到一种没有列索引号的方法。有没有一种方法可以使用列索引号将顶行添加到 DF1 以执行两个 DF 的内部连接?我也一直在寻找将 DF 转换为 headers 的方法,但目前还没有运气。

所需的最终 DF 如下所示:

+--------------------------------------------------------------------+
|       Desc   Round 1    Round 2    Round 3    Round 4    Round 5   |
|       Opp    Hawks      Dolphins   Raptors    Sharks     Bears     |
|       Date   02/04      08/04      16/04      24/04      30/04     |
|       Venue  MELB       PERTH      MELB       SYD        MELB      |
+--------------------------------------------------------------------+
| 0     Tom    4          2          1          -          3         |
| 1     Mark   2          2          3          2          1         |
| 2     James  -          1          5          5          4         |
| ...   ...    ...        ...        ...        ...        ...       |
| 30    Ted    2          3          3          3          2         |
+--------------------------------------------------------------------+

我认为你需要 MultiIndex 另一个 DataFrame by MultiIndex.from_frame 并进行转置:

DF1.columns = pd.MultiIndex.from_frame(DF2.T, names= [None] * len(DF2))
print (DF1)
     Desc Round 1  Round 2 Round 3 Round 4 Round 5
      Opp   Hawks Dolphins Raptors  Sharks   Bears
     Date   02/04    08/04   16/04   24/04   30/04
    Venue    MELB    PERTH    MELB     SYD    MELB
0     Tom       4        2       1       -       3
1    Mark       2        2       3       2       1
2   James       -        1       5       5       4
30    Ted       2        3       3       3       2

您可以使用 pd.MultiIndex.from_arrays:

df1.columns = pd.MultiIndex.from_arrays(df2.values)
print(df1)

# Output
     Desc Round 1  Round 2 Round 3 Round 4 Round 5
      Opp   Hawks Dolphins Raptors  Sharks   Bears
     Date   02/04    08/04   16/04   24/04   30/04
    Venue    MELB    PERTH    MELB     SYD    MELB
0     Tom       4        2       1       -       3
1    Mark       2        2       3       2       1
2   James       -        1       5       5       4
30    Ted       2        3       3       3       2

您还可以使用理解来创建可用作 MultiIndex:

的元组元组
df1.columns = tuple(tuple(l) for l in df2.T.values)
print(df1)

# Output
     Desc Round 1  Round 2 Round 3 Round 4 Round 5
      Opp   Hawks Dolphins Raptors  Sharks   Bears
     Date   02/04    08/04   16/04   24/04   30/04
    Venue    MELB    PERTH    MELB     SYD    MELB
0     Tom       4        2       1       -       3
1    Mark       2        2       3       2       1
2   James       -        1       5       5       4
30    Ted       2        3       3       3       2