[英]Merging dataframes on index with pandas
我有两个数据帧,每个数据帧有两个索引列。 我想合并它们。 例如,第一个数据帧如下:
V1
A 1/1/2012 12
2/1/2012 14
B 1/1/2012 15
2/1/2012 8
C 1/1/2012 17
2/1/2012 9
第二个数据帧如下:
V2
A 1/1/2012 15
3/1/2012 21
B 1/1/2012 24
2/1/2012 9
D 1/1/2012 7
2/1/2012 16
结果我想得到以下内容:
V1 V2
A 1/1/2012 12 15
2/1/2012 14 N/A
3/1/2012 N/A 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 7 N/A
2/1/2012 16 N/A
D 1/1/2012 N/A 7
2/1/2012 N/A 16
我使用pd.merge
和.join
方法尝试了几个版本,但似乎没有任何工作。 你有什么建议吗?
您应该能够使用join
,它默认连接在索引上。 根据您所需的结果,您必须使用outer
作为连接类型。
>>> df1.join(df2, how='outer')
V1 V2
A 1/1/2012 12 15
2/1/2012 14 NaN
3/1/2012 NaN 21
B 1/1/2012 15 24
2/1/2012 8 9
C 1/1/2012 17 NaN
2/1/2012 9 NaN
D 1/1/2012 NaN 7
2/1/2012 NaN 16
签名:_. join(其他,on = None,how ='left',lsuffix ='',rsuffix ='',sort = False)Docstring:在索引或键列上与其他DataFrame连接列。 通过传递列表,有效地通过索引连接多个DataFrame对象。
您可以通过merge
执行此操作:
df_merged = df1.merge(df2, how='outer', left_index=True, right_index=True)
关键字参数how='outer'
保留两个帧的所有索引,用NaN
填充缺失的索引。 left_index
和right_index
关键字参数在索引上进行合并。 如果在合并后获得列中的所有NaN
,则另一个故障排除步骤是验证索引是否具有相同的dtypes
。
上面的merge
代码为我生成以下输出:
V1 V2
A 2012-01-01 12.0 15.0
2012-02-01 14.0 NaN
2012-03-01 NaN 21.0
B 2012-01-01 15.0 24.0
2012-02-01 8.0 9.0
C 2012-01-01 17.0 NaN
2012-02-01 9.0 NaN
D 2012-01-01 NaN 7.0
2012-02-01 NaN 16.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.