2017-01-26 10 views
1

時間を分単位で変換する作業コードがありますが(時間値の条件付き)、現在はデータフレーム行を繰り返し処理しています。大きなデータフレームPython/pandas - 条件付き時間を分に変換します。

私は2頭のパンダを持っているシリーズ(現実には、これらは、より大きなデータフレームの列です):

hours = pd.Series([0,10,15,20,30]) 
mins = pd.Series([10,0,0,20,10]) 

私は何をしたいことは以下の通りです:

  • 戻り単一シリーズ続き総継続時間(分)
  • 時間値が15,30,45,60または90の場合は、時間 - 分変換なしの分数値に直接追加し、時間を0に設定します。それ以外の場合は、
    0  10.0 
    1  600.0 
    2  15.0 
    3 1220.0 
    4  40.0 
    

    は私が何を達成し、次の関数を書いた:、その後、私は、次のシリーズのように出力を期待してい(注指標2及び4)は

追加を行い、数分に時間を変換します私は欲しい:

データフレームの行を反復せずにPandasでこれを行う正しい方法は何ですか?条件が関係するときに2列にわたってパンダをマスキングする方法を理解できないようです

答えて

2

whereisinを使用すると、値が必要な値のリストにない場合あなたの通常の操作でできfillna:あなたは、これが壊れ見ることができます

In [134]: 
(hours.where(~hours.isin([15,30,45,60,90])) * 60 + mins).fillna(hours + mins) 

Out[134]: 
0  10.0 
1  600.0 
2  15.0 
3 1220.0 
4  40.0 
dtype: float64 

In [135]: 
hours.isin([15,30,45,60,90]) 

Out[135]: 
0 False 
1 False 
2  True 
3 False 
4  True 
dtype: bool 

In [136]: 
~hours.isin([15,30,45,60,90]) 

Out[136]: 
0  True 
1  True 
2 False 
3  True 
4 False 
dtype: bool 

In [138]: 
hours.where(~hours.isin([15,30,45,60,90])) 

Out[138]: 
0  0.0 
1 10.0 
2  NaN 
3 20.0 
4  NaN 
dtype: float64 

In [139]: 
(hours.where(~hours.isin([15,30,45,60,90])) * 60 + mins) 

Out[139]: 
0  10.0 
1  600.0 
2  NaN 
3 1220.0 
4  NaN 
dtype: float64