Python 将dataframe列与列表中基于另一列选择的因子相乘
我有每天的机场到达和离开人数,我想根据每小时的因素将其减少到每小时的数据。我在列表中列出了我的小时系数,例如:Python 将dataframe列与列表中基于另一列选择的因子相乘,python,pandas,iteration,Python,Pandas,Iteration,我有每天的机场到达和离开人数,我想根据每小时的因素将其减少到每小时的数据。我在列表中列出了我的小时系数,例如: factors = { 0: 0.1, 1: 0.3, 2: 0.5, 3: 0.1,} 交通数据位于数据帧中,当前每小时有DateTimeIndex,并带有填充值(例如每天300次移动,现在每小时有此条目) 我试着把这一小时写进一个新的专栏
factors = { 0: 0.1,
1: 0.3,
2: 0.5,
3: 0.1,}
交通数据位于数据帧中,当前每小时有DateTimeIndex,并带有填充值(例如每天300次移动,现在每小时有此条目)
我试着把这一小时写进一个新的专栏
df['hour'] = df.index.hour
然后创建一个新的列new\u scaled
,在这里我想将每日值乘以我想从列表中得到的这个特定小时的系数
df['new_scaled'] = df.daily*factors[df.hour]
我得到一个错误TypeError:“Series”对象是可变的,因此不能对它们进行散列
当我试图用df.index.hour
直接从列表中访问因子时,我得到TypeError:unhabable type:'Int64Index'
如何从列表中访问因子以计算新列?使用
使用
df['new_scaled'] = df.daily*factors[df.hour]
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