gpt4 book ai didi

python - 在 Python 中使用 Pandas 组合三个 DataFrame

转载 作者:行者123 更新时间:2023-12-01 08:21:17 25 4
gpt4 key购买 nike

我正在尝试在 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。

也许我需要连接和合并的组合?或者,因为基本上每个条目都是一个新行,所以我可以编写一个 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])

最佳答案

我发现连接第二个和第三个数据帧,然后按 x 排序列允许我生成一个与上面 df_result 中定义的预期输出相匹配的 df :

df1 = pd.DataFrame({'x': [1,2,3]})
df2 = pd.DataFrame({'x': [1,1,1,2,2,2,3],
'b': ['A', 'B', 'C', 'D', 'E', 'F', 'G']})
df3 = pd.DataFrame({'x': [1,1,2,3,3,3],
'c': ['L', 'M', 'N', 'O', 'P', 'Q']})


pd.concat([df2, df3], sort=False).sort_values('x').set_index('x', drop=True)

b c
x
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

关于python - 在 Python 中使用 Pandas 组合三个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com