我有一个临时KDF内核作为值的列表(或numpy数组),其中value index表示一周内相应的分钟。
我的数据是近似值,如下所述:
- kde:浮点值的列表或ndarray,长度为7 * 24 * 60。
- df:具有约50列不同类型的DataFrame,包括timestamp
列,其整数值在该范围内(0到7 * 24 * 60-1)。 Dataframe有大约2000000条记录。
作为样本:
col1|col2|...|col49|timestamp
1 | 2 |...| 49 | 15
2 | 3 |...| 50 | 16
我想要的输出应该是same dataframe
,kd
列,包括来自kde
的相应值。换句话说,对于数据框中的每条记录,我需要使用记录时间戳获取KDE值。我需要尽快做到。
期望的结果:
col1|col2|...|col49|timestamp | kd
1 | 2 |...| 49 | 15 | 0.342
2 | 3 |...| 50 | 16 | 0.543
现在,我使用.apply():
df['kd'] = df.timestamp.apply(lambda z: kde[z])
然而,它的工作相对较慢,因为(据我所知),它仍受GIL限制。有没有办法对这个非常简单的函数进行矢量化?
答案 0 :(得分:1)
我会做
import numpy as np
import pandas as pd
df['kd'] = np.array(kd)[df.timestamp.values]
答案 1 :(得分:0)
我可能使用的另一个解决方案是:
kdeDF = pf.DateFrame({'kd':kde}).reset_index()
kdeDF.columns = ['index', 'kd']
data1 = data.merge(kdeDF, how='left', left_on='timestamp', right_on='index')
但它看起来也很丑陋