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
我想将此查找数据帧中的值相乘以创建另一个数据帧的列,该数据帧以日期时间为索引。数据框如下所示:
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
列,其中赋予“data-2”列的权重取决于 df_lookup 中的相应值。我通过如下循环索引来获得所需的值,但这太慢了:
for idx in df.index:
df.loc[idx,'data-3'] = df.loc[idx, 'data-2']*df_lookup.at[idx.hour]
有人可以建议更快的方法吗?
解决方案
使用.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
推荐阅读
- azure-data-factory - 如何将 AzureDatafactory 中的 DataPath PipelineParameter 传递给 AzureMachineLearningExecutePipeline Activity?
- git - 将更改从分支开发拉到我的功能
- matrix - 如何有效地获得矩阵的总和?
- sql - SQL 保留或运行总计
- reporting-services - SSRS Report Repeat tablix inside list for each parameter value
- mysql - MySQL 连接池如何区分 NodeJS 中的连接(使用 mysqljs)?
- flutter - Flutter 可折叠 SliverAppBar,但没有 TabBar 的背景
- reactjs - 我在从 react Login 组件调度 redux 操作时遇到问题。我试图弄清楚它是徒劳的
- c# - 更改 UWP 文本框的屏幕阅读器行为?
- javascript - 为对象内的变量设置状态