说我有这两个数据集:
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
在日期与第二个数据集匹配的情况下,在第一个数据集中添加新列的方法是什么?
非常感谢您!
答案 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)