python - 将列从一个数据帧添加到另一个数据帧,以获取重叠列中存在的值

标签 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]

这没有给我我想要的结果。

最佳答案

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

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]

是因为合并的默认类型是“内部”,所以值必须同时存在于左侧和右侧,请参阅文档:http://pandas.pydata.org/pandas-docs/stable/merging.html#database-style-dataframe-joining-merging

关于python - 将列从一个数据帧添加到另一个数据帧,以获取重叠列中存在的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374147/

相关文章:

python - 数据框中多列的 LabelBinarizer

python - Pandas 融化以复制值并插入新列

python - 从网站抓取数据到 Pandas 数据框

python - 检查系列中每一行数据类型的有效方法

python - 带有元组的字典放入数据框

python - Selenium 找不到元素如何以其他方式单击元素

python - 从 Jupyter notebook 错误中删除空目录

python - Bokeh 中具有紧密轴和匹配纵横比的图像图

python - 如何在添加字符串中的数字总和时忽略字母?

python - 如何从 Pandas 数据框的多列中获取唯一信息?