2016-06-28 9 views
0

私は一時的なKDFカーネルを値のリスト(またはnumpy配列)として持っています。numpy/pandasのベクター化されたlist.get()解答

私のデータは以下の通りです: - kde:7 * 24 * 60の長さの浮動小数値のリストまたはndarray。 - df:0〜7 * 24 * 60-1の範囲内の整数値を持つtimestamp列を含む、異なるタイプの〜50列のDataFrame。データフレームには2000000レコードがあります。サンプルとして

col1|col2|...|col49|timestamp 
1 | 2 |...| 49 | 15 
2 | 3 |...| 50 | 16 

私の所望の出力は、kdeから対応する値を含む、​​カラムで、非常にsame dataframeなければなりません。言い換えれば、データフレームの各レコードについて、レコードタイムスタンプを使用して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

にしてください、あなたは後です:{( 'DF = pd.DataFrame 'kd':kde}) '?または、 'df'が既に存在する場合:' df ['kd'] = kde' ... – MaxU

+0

MaxU、私のデータフレームには数百万のレコードが含まれています。それぞれのために、7 * 24 * 60レコードを含むkdeから値を取得する必要があります。私はこのアプローチが行くとは思わない。結果はタイムスタンプ値に依存する必要があります –

+1

サンプルの_input_と_desired_データセットを提供してください。あなたの手助けをする方法を理解できるようにしてください。[how-to-make-good-reproducible-pandas-examples] //stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) – MaxU

答えて

1

私は

import numpy as np 
import pandas as pd 

df['kd'] = np.array(kd)[df.timestamp.values] 
+0

ありがとう、それは私が探していたものです –

0

私が使用する可能性があります別の解決策は次のとおりです。

kdeDF = pf.DateFrame({'kd':kde}).reset_index() 
kdeDF.columns = ['index', 'kd'] 
data1 = data.merge(kdeDF, how='left', left_on='timestamp', right_on='index') 

が、それはまた、かなり醜い

関連する問題