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
我正在尝试将两个 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