pandas - 两个数据帧的完全外连接
问题描述
完全外连接,在所有列中保留连接键
我有三个尺寸为 mx 1 的数据框,每个数据框都有不同的 m:
df1 = pd.DataFrame({'x':['A1', 'A2', 'A3', 'A4']})
df2 = pd.DataFrame({'y':['A1', 'A3', 'A5', 'A4']})
df3 = pd.DataFrame({'z':['A1','A2', 'A5', 'A6']})
我想要一个df_merged
这样的数据框:
x y z
0 A1 A1 A1
1 A2 nan A2
2 A3 A3 nan
3 A4 A4 nan
4 nan A5 A5
5 nan nan A6
pd.merge
尝试了几个小时使用andpd.concat
和 and来解决这个问题pd.join
任何帮助将非常感激!谢谢!
解决方案
在列表推导中使用concat
按第一列创建索引 by DataFrame.set_index
:
dfs = [df1, df2, df3]
df = pd.concat([x.set_index(x.iloc[:, 0], drop=False)
for x in dfs], axis=1, sort=True).reset_index(drop=True)
print (df)
x y z
0 A1 A1 A1
1 A2 NaN A2
2 A3 A3 NaN
3 A4 A4 NaN
4 NaN A5 A5
5 NaN NaN A6
推荐阅读
- java - 有没有办法创建一个行为类似于接口的注释?
- python-3.x - 如何打印一行?
- json - JSONSchema(草案 7)不验证数组的子定义
- java - 我不知道如何为空数组分配新值
- sqlalchemy - Flask SQLAlchemy中一对一关系的实现
- c# - 使用 out 返回多个变量,似乎可以工作,但尝试输出时出错
- javascript - 用 jest 模拟 vue 的 i18n
- wordpress - 使用直接链接将 woocommerce 产品状态从私有更改为发布
- node.js - 如何在不获取 _id 的情况下获得输出
- dialogflow-es - 如何在 Dialogflow 意图中为 Google Actions 设置 else case