将数据框列与列表中的因子相乘,该因子是根据另一列选择的

问题描述

我有每天的机场到达和起飞的数量,我希望根据每小时的因素将其降采样为每小时的数据。我在列表中列出了我的小时因素,例如:

       factors = {  0: 0.1,1: 0.3,2: 0.5,3: 0.1,}

交通数据在一个数据框中,当前每小时带有DateTimeIndex,并带有填充值(例如,每天300次移动,现在每小时显示此条目)。

    datum                  daily
    2018-01-01 00:00:00    306
    2018-01-01 01:00:00    306
    2018-01-01 02:00:00    306
    2018-01-01 03:00:00    306

我试图用以下方法将时间输入新的列

    df['hour'] = df.index.hour

然后创建一个新列new_scaled在这里我要将每日价值乘以我要从列表中获得的特定小时的因子。

    df['new_scaled'] = df.daily*factors[df.hour]

我收到一个错误TypeError: 'Series' objects are mutable,thus they cannot be hashed

当我尝试直接使用df.index.hour从列表中访问因子时,我得到TypeError: unhashable type: 'Int64Index'

如何从列表中访问因子以计算新列?

解决方法

使用Series.map

factors = {0: 0.1,1: 0.3,2: 0.5,3: 0.1}

df['datum']  = pd.to_datetime(df.datum)

df['new_scaled']  = df.datum.dt.hour.map(factors) * df.daily

                datum  daily  new_scaled
0 2018-01-01 00:00:00    306        30.6
1 2018-01-01 01:00:00    306        91.8
2 2018-01-01 02:00:00    306       153.0
3 2018-01-01 03:00:00    306        30.6