问题描述
我有每天的机场到达和起飞的数量,我希望根据每小时的因素将其降采样为每小时的数据。我在列表中列出了我的小时因素,例如:
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