2015-03-31 94 views
2

這裏是什麼,我試圖做一個例子:從一個數據幀添加列到另一個,爲現值重疊列

In [46]: import pandas as pd 

In [47]: df_3 = pd.DataFrame(np.arange(12).reshape(6,2), columns=["a", "z"]) 


In [48]: df = pd.DataFrame(np.arange(12).reshape(4,3), columns=["a", "b", "c"]) 

In [49]: df 
Out[49]: 
    a b c 
0 0 1 2 
1 3 4 5 
2 6 7 8 
3 9 10 11 

[4 rows x 3 columns] 

In [50]: df_3 
Out[50]: 
    a z 
0 0 1 # present in df 
1 2 3 
2 4 5 
3 6 7 # present in df 
4 8 9 
5 10 11 

[6 rows x 2 columns] 

我想列z合計到df,但我想要的值僅適用於列a上匹配的行。如果不是,我想要一個空值。

我的期望輸出應該是這樣的:

In [52]: df["z"] = [1, np.nan, 7, np.nan] 

In [53]: df 
Out[53]: 
    a b c z 
0 0 1 2 1 
1 3 4 5 NaN 
2 6 7 8 7 
3 9 10 11 NaN 

[4 rows x 4 columns] 

我試過天真的嘗試,像

In [57]: df.merge(df_3, on=["a"]) 
Out[57]: 
    a b c z 
0 0 1 2 1 
1 6 7 8 7 

[2 rows x 4 columns] 

哪個不給我,我要找的結果。

回答

2

上 'A' 立柱稍稍進行merge和執行左鍵類型合併:

In [57]: df.merge(df_3, on=["a"]) 
Out[57]: 
    a b c z 
0 0 1 2 1 
1 6 7 8 7 

[2 rows x 4 columns] 

是因爲合併的默認類型是「:

In [72]: 

df.merge(df_3, on='a', how='left') 
Out[72]: 
    a b c z 
0 0 1 2 1 
1 3 4 5 NaN 
2 6 7 8 7 
3 9 10 11 NaN 

你得到這個結果的原因內在',所以值必須存在於lhs和rhs中,請參閱文檔:http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging

+0

完美。謝謝。 – Akavall 2015-03-31 17:01:05

相關問題