对于重叠列中存在的值,将列从一个数据框添加到另一个数据框

时间:2015-03-31 16:52:29

标签: python pandas

这是我想要做的一个例子:

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]

哪个不能给我我想要的结果。

1 个答案:

答案 0 :(得分:2)

只需在'a'列上执行merge并执行左类型合并:

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

你得到这个结果的原因是:

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]

是因为合并的默认类型是'inner',因此值必须同时存在于lhs和rhs中,请参阅文档:http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging