我该如何通过列和索引拼接Pandas数据框?

15

我有四个带有数字列和索引的Pandas数据框:

A = pd.DataFrame(data={"435000": [9.792, 9.795], "435002": [9.825, 9.812]}, index=[119000, 119002])
B = pd.DataFrame(data={"435004": [9.805, 9.783], "435006": [9.785, 9.78]}, index=[119000, 119002])
C = pd.DataFrame(data={"435000": [9.778, 9.743], "435002": [9.75, 9.743]}, index=[119004, 119006])
D = pd.DataFrame(data={"435004": [9.743, 9.743], "435006": [9.762, 9.738]}, index=[119004, 119006])

enter image description here

我希望将它们连接成一个DataFrame,匹配列名和索引,如下所示:

enter image description here

如果我尝试使用pd.concat合并这四个数据框,它们将被堆叠在一起(根据axis的不同,可能是上下堆叠或左右排列),结果我会得到NaN值的数据框:
result = pd.concat([A, B, C, D], axis=0)

enter image description here

我该如何使用 pd.concat(或 mergejoin 等)来获得正确的结果?

2个回答

17

你需要成对拼接:

result = pd.concat([pd.concat([A, C], axis=0), pd.concat([B, D], axis=0)], axis=1)
print (result)
        435000  435002  435004  435006
119000   9.792   9.825   9.805   9.785
119002   9.795   9.812   9.783   9.780
119004   9.778   9.750   9.743   9.762
119006   9.743   9.743   9.743   9.738

更好的方法是使用stack + concat + unstack

result = pd.concat([A.stack(), B.stack(), C.stack(), D.stack()], axis=0).unstack()
print (result)
        435000  435002  435004  435006
119000   9.792   9.825   9.805   9.785
119002   9.795   9.812   9.783   9.780
119004   9.778   9.750   9.743   9.762
119006   9.743   9.743   9.743   9.738

更具动态性:

dfs = [A,B,C,D]
result = pd.concat([df.stack() for df in dfs], axis=0).unstack()
print (result)
        435000  435002  435004  435006
119000   9.792   9.825   9.805   9.785
119002   9.795   9.812   9.783   9.780
119004   9.778   9.750   9.743   9.762
119006   9.743   9.743   9.743   9.738

1
很高兴能够帮忙,祝您愉快!顺便说一下,非常好的问题,色彩丰富 ;) - jezrael

6
你也可以使用 join 方法:
pd.concat((A.join(B), C.join(D)))
Out: 
        435000  435002  435004  435006
119000   9.792   9.825   9.805   9.785
119002   9.795   9.812   9.783   9.780
119004   9.778   9.750   9.743   9.762
119006   9.743   9.743   9.743   9.738

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接