2016-05-11 15 views
0

大量のデータを繰り返し処理するために、zip関数を持つforループを使用しています。Pythonジップ関数が同期しない

データは距離と時間であり、データベースは非常に大きいです。 通常、時間列には10分の1秒ごとの繰り返しがあります。例えば、1.1,1.2,1.3,1.4など。

しかし、たまにランダムな値がスローされます。

これは、df1とdf2の同期を外します。

これをフィルタリングする方法はありますか?私は以下の私のコードを入れている:

for x, y in list(zip(df1.loc['time'], df2.loc['time'])): 
    print df1.loc['dist'][df1.loc['time'] == x] - df2.loc['dist'][df1.loc['time'] == y] 

私は次のようになり得る結果:

1 0.0 
Name: dist, dtype: float64 
2 -0.01 
Name: dist, dtype: float64 
3 -0.02 
Name: dist, dtype: float64 
4 -0.03 
Name: dist, dtype: float64 
5 -0.05 
Name: dist, dtype: float64 
6 -0.06 
Name: dist, dtype: float64 
7 -0.06 
Name: dist, dtype: float64 
7 NaN 
8 NaN 
Name: dist, dtype: float64 
7 NaN 
9 NaN 

あなたはとてもITER 8に余分な値を入れたデータの一部があったの周りの反復7見ることができるでした同期外れ。

ありがとうございました。

+0

よう

何か)> == 0.01] ' – EdChum

+0

こんにちはEdさんが返信してくれてありがとうございます。私はちょうどKeyErrorを得ます:それを使用すれば 'dist'ですか? – OParker

+0

申し訳ありませんあなたのコードスニペットで 'df'の代わりに' df1'と 'df2'を置き換えていますか? – EdChum

答えて

0

通常の結合またはマージを使用しないのはなぜですか?あなただけの[] 'distの' [DF。デフ()> 0] `や` DF [] 'distの' [DF DF `ようにします。デフ(最初のDFをフィルタリングすることができ

df1.set_index('time') 
df2.set_index('time') 
jnd = df1.join(df2, how='inner', lsuffix='_1', rsuffix='_2') 
jnd['delta_dist'] = jnd['dist_1'] - jnd['dist_2'] 
関連する問題