2015-03-31 66 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

相关问题