使用内部联接联接两个数据框

时间:2019-05-26 23:42:01

标签: python python-3.x pandas

说我有这两个数据集:

Data frame 1:
X |  date
a |  1/1/2018
a |  1/2/2018
...
b |  1/1/2018

和df 2:

Holiday
1/1/2018
5/1/2018

在日期与第二个数据集匹配的情况下,在第一个数据集中添加新列的方法是什么?

非常感谢您!

3 个答案:

答案 0 :(得分:3)

这通过isin()方法到达那里。

df1 = pd.DataFrame({'date': ['1/1/2018', '1/2/2018', '1/1/2018']})
df2 = pd.DataFrame({'Holiday': ['1/1/2018', '5/1/2018']})
df1
#        date
# 0  1/1/2018
# 1  1/2/2018
# 2  1/1/2018
df2
#     Holiday
# 0  1/1/2018
# 1  5/1/2018

df1['is_holiday'] = df1.date.isin(df2.Holiday).astype(int)

df1
#        date  is_holiday
# 0  1/1/2018           1
# 1  1/2/2018           0
# 2  1/1/2018           1

答案 1 :(得分:3)

@Mike的isin方法足以回答您的问题,但是为了方便起见,您可以使用带有指示器的merge来扩展数据框,获取有关比赛的更多信息:

df1.merge(df2, left_on='date', right_on='Holiday', how='left', indicator=True)

   X      date   Holiday     _merge
0  a  1/1/2018  1/1/2018       both
1  a  1/2/2018       NaN  left_only
2  b  1/1/2018  1/1/2018       both

我们在这里看到_merge列,该列指示匹配项是在两个字段中还是仅在左边。

答案 2 :(得分:1)

在熊猫和其他语言(即SQL和R)中,“合并”和“联接”一词相对可互换使用。在熊猫中,有单独的“合并”和“联接”功能,两者功能相似。

result = pd.merge(df1, df2, on = 'id_column')
result.head()

在您的特定情况下,这可能不是完全必要的,因为您确实想有条件地向现有数据框中添加一列。按照@Mike的建议,您应该使用isin()。唯一的区别是我选择使用bool数据类型而不是int

df1['is_holiday'] = df1.date.isin(df2.Holiday).astype(bool)