2017-03-05 9 views
0

パンダSeriesへの私の素朴なアプローチは、いくつかのポインタを必要とします。私はパンダのデータフレームの2つの結合テーブルを持っています。左の表はtimestampでタイトルはTime1、右はTime2でした。私の新しいDataFrameには両方があります。2つの `timeseries`列の間に` if() `条件を記述するパンダの方法は何ですか?

この段階で私はヘルパー関数g()f()を使用して、2つのdatetime列を比較しています:これは私に与え

def g(newer,older): 
    value = newer > older 
    return value 

df['date_error'] = g(df['Time1'], df['Time2']) 

作業ヘルパー関数g()を2つのdatetime値を比較列(True,False)

def f(newer,older): 
    if newer > older: 
     delta = (newer - older) 
    else : 
     # arbitrairly large value to maintain col dtype 
     delta = datetime.timedelta(minutes=1000) 
    return delta 

OK:私はヘルパー関数f()に条件付きを使用する場合newerolderはパンダSeriesているので、私はエラーを取得します。ファイン。私は、これは以下の怪物で動作するように取得することができますので、私は、正しくパンダシリーズを開梱ないよ知っている:

def f(newer,older): 
    delta = [] 
    for (k,v),(k2,v2) in zip(newer.iteritems(), older.iteritems()): 
     if v > v2 : 
      delta.append(v - v2) 
     else : 
      # arbitrairly large value to maintain col dtype 
      delta.append(datetime.timedelta(minutes=1000)) 

    return pd.Series(delta) 

2つのデータフレームの列の間の条件付きパンダの方法は何ですか?通常


答えて

0

whereがあればのパンダと同等です:あなたはその後fillna(1000)呼び出すことができ、この列にNULLをしたくない場合は

df = pd.DataFrame([['1/1/01 11:00', '1/1/01 12:00'], 
        ['1/1/01 14:00', '1/1/01 13:00']],     
         columns = ['Time1', 'Time2'] 
       ).apply(pd.to_datetime) 

(df.Time1 - df.Time2).where(df.Time1 > df.Time2) 

0  NaT 
1 01:00:00 
dtype: timedelta64[ns] 

、しかし(このデータ型がNULL値NaTをサポートしていることに注意してください時間ではありません)。

関連する問題