我有四个带有数字列和索引的Pandas DataFrames:
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])
我想将它们连接成一个这样的DataFrame,匹配列名和索引:
如果我尝试pd.concat
四个dfs,它们会堆叠在一起(上方和下方,或侧面,取决于axis
),我最终会得到NaN
个值df:
result = pd.concat([A, B, C, D], axis=0)
如何使用pd.concat
(或merge
,join
等)来获得正确的结果?
答案 0 :(得分:4)
你需要成对联合:
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
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 :(得分:2)
您也可以使用加入:
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