2014-09-23 82 views
0

我有一個主數據幀df1,它是'空'的,其他一些長度不同的數據幀與df1有相同的列。我想合併/加入/ DF2的concat和DF3上DF1的某些指標的位置:如何在大熊貓索引上合併/連接/連接數據幀

df1 = pd.DataFrame(index=(np.arange(20)), columns=['A', 'B', 'C', 'D']) 
df2 = pd.DataFrame(randn(5, 4), columns=['A', 'B', 'C', 'D']) 
df3 = pd.DataFrame(randn(2, 4), columns=['A', 'B', 'C', 'D']) 
df4 = pd.concat([df1, df2, df3],axis=0, keys=['','df2','df3']) 

然而,CONCAT([DF1,DF2,DF3],軸= 0,鍵....)放dfs連續在一起...

作爲示例,df2應該從df1.index(3)開始,df1從df1.index(12)開始,在df2和df3之前,之間和之後留下df1的NAN。

回答

1

您將無法使用像這樣的concat來實現您想要的功能,或者無需重新索引就可以合併。默認情況下,concat將使用原始索引值,並且會將dfs堆疊在一起。如果您嘗試使用索引進行合併,則它們會衝突並創建附加列,例如「X_X‘X_Y’等。

最簡單的方法是重新索引DFS,然後調用更新在需要的行覆蓋的NaN:

In [55]: 

df1 = pd.DataFrame(index=(np.arange(20)), columns=['A', 'B', 'C', 'D']) 
df2 = pd.DataFrame(randn(5, 4), columns=['A', 'B', 'C', 'D'], index=arange(3,8)) 
df3 = pd.DataFrame(randn(2, 4), columns=['A', 'B', 'C', 'D'], index=arange(12,14)) 
df1.update(df2) 
df1.update(df3) 
df1 
Out[55]: 
      A   B   C   D 
0   NaN  NaN  NaN  NaN 
1   NaN  NaN  NaN  NaN 
2   NaN  NaN  NaN  NaN 
3 1.315786 -0.4132373 1.084278 -0.945918 
4 2.663868 0.8093393 -0.9853748 -1.428507 
5 0.1414072 0.1896291 1.562247 0.1180398 
6 1.699411 1.518535 -0.1854568 -0.430911 
7 -1.716514 1.053428 0.3587436 1.471504 
8   NaN  NaN  NaN  NaN 
9   NaN  NaN  NaN  NaN 
10  NaN  NaN  NaN  NaN 
11  NaN  NaN  NaN  NaN 
12 -0.5668472 -0.137524 0.1769178 0.7065836 
13 -1.726548 0.2645793 0.1484438 -1.099373 
14  NaN  NaN  NaN  NaN 
15  NaN  NaN  NaN  NaN 
16  NaN  NaN  NaN  NaN 
17  NaN  NaN  NaN  NaN 
18  NaN  NaN  NaN  NaN 
19  NaN  NaN  NaN  NaN 

所以,你可以像在創建後修改索引這個:

In [56]: 

df2 = pd.DataFrame(randn(5, 4), columns=['A', 'B', 'C', 'D']) 
print(df2) 
df2.index = index=arange(3,8) 
df2 
      A   B   C   D 
0 -0.417199 0.184960 -1.056915 0.674005 
1 0.592654 1.131421 -0.958991 0.831648 
2 -1.087500 0.664596 -1.508290 2.453404 
3 1.441886 -0.131998 0.040513 -2.675875 
4 1.547340 -0.230203 1.335917 -1.568939 
Out[56]: 
      A   B   C   D 
3 -0.417199 0.184960 -1.056915 0.674005 
4 0.592654 1.131421 -0.958991 0.831648 
5 -1.087500 0.664596 -1.508290 2.453404 
6 1.441886 -0.131998 0.040513 -2.675875 
7 1.547340 -0.230203 1.335917 -1.568939 
+0

非常好!簡單 - 謝謝。有沒有辦法可以包含df2和df3的密鑰? – mati 2014-09-23 11:17:54

+0

這是一個有點混淆你所要求的,你連接3 dfs和添加關鍵參數,實際上將創建一個多級索引0級[['','df2','df3']],然後關聯索引值,但你希望df2和df3行覆蓋「'級別值 – EdChum 2014-09-23 11:33:01

+0

這只是我的問題的一小部分。我發現多索引鍵對於更好的概述非常有用(對我來說,對於新手來說)並且可能稍後進行檢查或單個數據幀(數據集)修改。因爲我不需要它,所以使用nan的所有內容都是df1,但df2和df3可能在後期階段有用......如果只有所有的鍵即df1,df2,df3都可以分配,它也是精細。 – mati 2014-09-23 11:46:46