根据来自另一个数据框的查找值创建一个熊猫列

时间:2019-01-04 22:56:28

标签: python-3.x pandas

我有一个pandas数据框,它具有按小时显示的一些数据值(也是该查找数据框的x <- c(1,2,3,4,5,6,7,8,9,10) y <-c(10,15,23,33,46,50,57,63,68,75) model <- lm( y ~poly(x,2)) )。数据框如下所示:

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

我想从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 列中计算data-3列,其中赋予“ data-2”列的权重取决于df_lookup中的相应值。我可以通过如下遍历索引来获得所需的值,但这太慢了:

data-2

有人可以提出更快的建议吗?

2 个答案:

答案 0 :(得分:4)

使用.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

答案 1 :(得分:0)

我可能会尝试加入。

# Fix column name
df_lookup.columns = ['multiplier']

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

# Join
df = df.join(df_lookup, how='left', on=['hour'])
df['data-3'] = df['data-2'] * df['multiplier']
df = df.drop(['multiplier', 'hour'], axis=1)