繁体   English   中英

如何通过比较不同数据框中的列来创建虚拟变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM