2017-03-16 6 views
2

は、単純なデータフレームpandasデータフレームの列間の条件付き計算の操作方法は?ここで

import pandas as pd 
import numpy as np 
dates = pd. date_range(' 20130101' , periods=14) 
data = pd.DataFrame({'a':[1,0,0,1,0,0,0,1,1,0,0,1,0,0],'b':[0,0,1,0,0,1,0,0,0,0,1,0,1,0]},index=dates) 

ある今、私はすべて一緒に、以下の条件で、列「C」を追加したいと思います。

  1. if a = 1, c = 1
  2. if b = 1, c = 0
  3. if a = 0 and b = 0, c = c.shift(1) 制約:同時にa = 1b = 1のない例が存在しません。

これは何かいいアイデア簡単な質問ですが、解決するのは非常に難しい...

答えて

2

IIUCは、次のものが必要です。

data['c'] = np.where(data.a == 1, 1, 
      np.where(data.b == 1, 0, np.nan)) 
print (data) 
      a b c 
2013-01-01 1 0 1.0 
2013-01-02 0 0 NaN 
2013-01-03 0 1 0.0 
2013-01-04 1 0 1.0 
2013-01-05 0 0 NaN 
2013-01-06 0 1 0.0 
2013-01-07 0 0 NaN 
2013-01-08 1 0 1.0 
2013-01-09 1 0 1.0 
2013-01-10 0 0 NaN 
2013-01-11 0 1 0.0 
2013-01-12 1 0 1.0 
2013-01-13 0 1 0.0 
2013-01-14 0 0 NaN 

その後、私は確認していない場合は必要bfillまたはffill

data['c'] = data['c'].bfill() 
print (data) 
      a b c 
2013-01-01 1 0 1.0 
2013-01-02 0 0 0.0 
2013-01-03 0 1 0.0 
2013-01-04 1 0 1.0 
2013-01-05 0 0 0.0 
2013-01-06 0 1 0.0 
2013-01-07 0 0 1.0 
2013-01-08 1 0 1.0 
2013-01-09 1 0 1.0 
2013-01-10 0 0 0.0 
2013-01-11 0 1 0.0 
2013-01-12 1 0 1.0 
2013-01-13 0 1 0.0 
2013-01-14 0 0 NaN 

data['c'] = data['c'].ffill() 
print (data) 
      a b c 
2013-01-01 1 0 1.0 
2013-01-02 0 0 1.0 
2013-01-03 0 1 0.0 
2013-01-04 1 0 1.0 
2013-01-05 0 0 1.0 
2013-01-06 0 1 0.0 
2013-01-07 0 0 0.0 
2013-01-08 1 0 1.0 
2013-01-09 1 0 1.0 
2013-01-10 0 0 1.0 
2013-01-11 0 1 0.0 
2013-01-12 1 0 1.0 
2013-01-13 0 1 0.0 
2013-01-14 0 0 0.0 
+0

ありがとうございました! –

2

代替

data.assign(
    c=np.where(v.sum(1, keepdims=1), (np.diff(v[:, ::-1]) + 1)/2, np.nan) 
).ffill() 

      a b c 
2013-01-01 1 0 1.0 
2013-01-02 0 0 1.0 
2013-01-03 0 1 0.0 
2013-01-04 1 0 1.0 
2013-01-05 0 0 1.0 
2013-01-06 0 1 0.0 
2013-01-07 0 0 0.0 
2013-01-08 1 0 1.0 
2013-01-09 1 0 1.0 
2013-01-10 0 0 1.0 
2013-01-11 0 1 0.0 
2013-01-12 1 0 1.0 
2013-01-13 0 1 0.0 
2013-01-14 0 0 0.0 
+0

あなたの親切なサポートをありがとう、いつも〜 –

関連する問題