2017-03-16 70 views
2

下面是一個簡單的數據框如何在熊貓數據框中的列之間進行條件計算?

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 

話,我不知道是否需要bfillffill

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

謝謝你的支持,永遠〜 –