2016-08-03 27 views
1

2つのイベント間の時間を計算する条件文に基づいて、パンダに列を作成しようとしています。私は一日の計算をうまくすることができましたが、私の条件文に差し込まれたとき:列によって呼び出さパンダ日付条件計算

def defect_age(df): 
    if df['Status'] == 'R': 
     return (pd.to_datetime(df['resolved_on'], errors='coerce') - pd.to_datetime(df['submitted_on']))/np.timedelta64(1, 'D') 
    else: 
     return 'null' 

以降:

group_df['Age'] = group_df.apply(defect_age(group_df), axis=0) 

私は、次のエラーを取得しています:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

私は質問に私の基礎を築きましたHERE ...しかし、私は多くの成功を収めていません。どんな助けもありがとう!

答えて

1

場合にブール値のリストを入れて傾けますif df['Status'] == 'R'

これは一連のブール値であり、ifに必要な単一のブール値ではありませんでした。それでも、これをシリーズ全体で一度に実行したいと考えています。私はあなたにトリックをする何かを与えてくれることを願っています。

+0

素晴らしい!ありがとう。あなたの答えは、私が把握しようとしていたものです。私は今追加するつもりのステータスをたくさん持っている:) – anshanno

1

はこのようにそれを実行します。

group_df['Age'] = group_df.apply(lambda row:defect_age(row), axis=1) 

一度に全体ではなく、データフレームに、各行に関数を適用したいためです。データフレームに適用された場合

df['Status'] == 'R'は、ブール値のリストを与えるとuがエラーから来たdefect_age

def defect_age(df): 
    resolved = pd.to_datetime(df.resolved_on, errors='coerce') 
    submitted = pd.to_datetime(df.submitted_on) 
    r = (resolved - submitted)/np.timedelta64(1, 'D') 
    return np.where(df.Status == 'R', r, np.nan) 

のこの定義を使用してみてください表現