【发布时间】:2019-02-11 15:52:58
【问题描述】:
我正在尝试在 python 中组合三个 pandas DataFrame。下面是我尝试组合的三个 DataFrame 以及我想要的输出(其中 NaN 为空)。我知道用左合并加入这两个表是行不通的。实现所需输出的两次合并的正确顺序是什么? (如果不可能,不必是一行代码)谢谢!
df1
+--------+
| x |
+--------+
| 1 |
| 2 |
| 3 |
+--------+
df2
+--------+---+
| x | b |
+--------+---+
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 2 | E |
| 2 | F |
| 3 | G |
+--------+---+
df3
+--------+---+
| x | c |
+--------+---+
| 1 | L |
| 1 | M |
| 2 | N |
| 3 | O |
| 3 | P |
| 3 | Q |
+--------+---+
df_result
+----------------+-----+-----+
| x | b | c |
+----------------+-----+-----+
| 1 | A | NaN |
| 1 | B | NaN |
| 1 | C | NaN |
| 1 | NaN | L |
| 1 | NaN | M |
| 2 | D | NaN |
| 2 | E | NaN |
| 2 | F | NaN |
| 2 | NaN | N |
| 3 | G | NaN |
| 3 | NaN | O |
| 3 | NaN | P |
| 3 | NaN | Q |
+----------------+-----+-----+
以下尝试不会产生如上所示的 df_result DataFrame:
attempt1:
df_step1 = df1.merge(df2, on='x', how='left')
df_result = df_step1.merge(df3, on='x', how='left')
df_result
我已经用左、右、外和内连接/合并的不同组合尝试了上述方法
attempt2:
df_result = pd.concat([table1, table2, table3], axis=1, sort='false')
df_result
这也不会产生所需的 df_result DataFrame。
也许我需要一个 concat 和 merge 的组合?或者,因为它基本上是每个条目的新行,所以我可以只编写一个 for 循环,将这些条目中的每一个的信息输入到 df 的新系列中。像这样的:
for i in range(len(df1.index)):
for j in range (len(df2.index)):
df_result = df_result.append(df2[j])
for k in range (len(df3.index)):
df_result = df_result.append(df3[k])
【问题讨论】:
-
表 2 中的 O 是哪里
-
为什么“x”是唯一只有 1 行而不是 2 行的值?或者,是“x”、“b”和“c”列名吗?
-
我想你想要一个 FULL OUTER JOIN 的类似物,不是吗?
-
嗯,
pd.concat([df1, df2])是你想要的吗? -
@coldspeed 是的。我没有正确粘贴表格,因此帖子中的格式已关闭。第一行应该是列名。我将编辑原始帖子。
标签: python pandas dataframe join merge