2017-05-19 22 views
4

我有四個大熊貓DataFrames用數值列和指標:如何按列和索引連接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]) 

enter image description here

我想將它們連接成這樣一個數據幀,兩個列名和索引匹配:

enter image description here

如果我嘗試pd.concat這四個dfs,它們會被堆疊(上面和下面或側面,具體取決於axis),我結束了NaN值在DF:

result = pd.concat([A, B, C, D], axis=0) 

enter image description here

如何使用pd.concat(或mergejoin等),以獲得正確的結果呢?

回答

3

你需要對CONCAT:

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 
+0

非常感謝,動態版本是完美的。 – user2950747

+0

很高興能幫到你,美好的一天!順便說一句,非常好的問題,豐富多彩;) – jezrael

1

您可以使用加入過:

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 
相關問題