根据来自另一个数据帧的查找值创建一个 Pandas 列

Vak*_*und 4 python-3.x pandas

我有一个 Pandas 数据框,它有一些按小时计算的数据值(这也是index这个查找数据框的)。数据框如下所示:

In [1] print (df_lookup) 
Out[1] 0     1.109248
       1     1.102435
       2     1.085014
       3     1.073487
       4     1.079385
       5     1.088759
       6     1.044708
       7     0.902482
       8     0.852348
       9     0.995912
       10    1.031643
       11    1.023458
       12    1.006961
       ...
       23    0.889541
Run Code Online (Sandbox Code Playgroud)

我想将此查找数据帧中的值相乘以创建另一个数据帧的列,该列将日期时间作为索引。数据框如下所示:

In [2] print (df)
Out[2] 
Date_Label           ID  data-1  data-2    data-3
2015-08-09 00:00:00  1   2513.0    2502     NaN  
2015-08-09 00:00:00  1   2113.0    2102     NaN  
2015-08-09 01:00:00  2   2006.0    1988     NaN  
2015-08-09 02:00:00  3   2016.0    2003     NaN 
...
2018-07-19 23:00:00  33  3216.0    333      NaN  
Run Code Online (Sandbox Code Playgroud)

我想data-3data-2列计算列,其中赋予“data-2”列的权重取决于 df_lookup 中的相应值。我通过如下循环遍历索引来获得所需的值,但这太慢了:

for idx in df.index:
   df.loc[idx,'data-3'] = df.loc[idx, 'data-2']*df_lookup.at[idx.hour]
Run Code Online (Sandbox Code Playgroud)

有人可以建议更快的方法吗?

WeN*_*Ben 5

使用 .loc

df['data-2']*df_lookup.loc[df.index.hour].values
Out[275]: 
Date_Label
2015-08-09 00:00:00    2775.338496
2015-08-09 00:00:00    2331.639296
2015-08-09 01:00:00    2191.640780
2015-08-09 02:00:00    2173.283042
Name: data-2, dtype: float64
#df['data-3']=df['data-2']*df_lookup.loc[df.index.hour].values
Run Code Online (Sandbox Code Playgroud)