[英]Pandas: Create a new column by comparing 2 columns in 2 different data frames
[英]How do I create a dummy variable by comparing columns in different data frames?
我想将 df 的一列与不同 df 的另一列进行比较。 列是时间戳和假日日期。 我想创建一个虚拟变量,其中如果 df1 中的时间戳与 df2 = 1 中的日期匹配,则为 0。
例如,df1:
timestamp weight(kg)
0 2016-03-04 4.0
1 2015-02-15 5.0
2 2019-05-04 5.0
3 2018-12-25 29.0
4 2020-01-01 58.0
例如,df2:
holiday
0 2016-12-25
1 2017-01-01
2 2019-05-01
3 2018-12-26
4 2020-05-26
理想output:
timestamp weight(kg) holiday
0 2016-03-04 4.0 0
1 2015-02-15 5.0 0
2 2019-05-04 5.0 0
3 2018-12-25 29.0 1
4 2020-01-01 58.0 1
我试过写一个 function 但计算需要很长时间:
def add_holiday(x):
hols_df = hols.apply(lambda y: y['holiday_dt'] if
x['timestamp'] == y['holiday_dt']
else None, axis=1)
hols_df = hols_df.dropna(axis=0, how='all')
if hols_df.empty:
hols_df= np.nan
else:
hols_df= hols_df.to_string(index=False)
return hols_df
#df_hols['holidays'] = df_hols.apply(add_holiday, axis=1)
也许,有一种更简单的方法可以做到这一点,或者 function 写得并不好。 任何帮助将不胜感激。
使用Series.isin
并通过Series.astype
将掩码转换为1,0
:
df1['holiday'] = df1['timestamp'].isin(df2['holiday']).astype(int)
或使用numpy.where
:
df1['holiday'] = np.where(df1['timestamp'].isin(df2['holiday']), 1, 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.