我有一个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
有人可以提出更快的建议吗?
答案 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)