2015-04-01 195 views
0

我有一組列,在其上欲如下來執行有條件的操作的數據幀:熊貓:添加有條件

foo = 0 * foobar2['var1'] 
foo.loc[foobar2['var1'] > 0] += foobar2.loc[foobar2['var1'] > 0, 'var1'] 
foo.loc[foobar2['var2'] > 0] += foobar2.loc[foobar2['var2'] > 0, 'var2'] 
foo.loc[foobar2['var3'] > 0] -= foobar2.loc[foobar2['var3'] > 0, 'var3'] 
foo.loc[foobar2['var4'] > 0] -= foobar2.loc[foobar2['var4'] > 0, 'var4'] 

即,我要總結var1var2,和減法var3,var4 - 無論何時這些變量爲正數,因爲負變量表示我的數據集中缺失值和類似數據。此代碼有效,但速度很慢。有沒有更有效的方法來做到這一點?

+0

您是否嘗試過使用case語句? – 2015-04-01 13:53:22

+2

Python沒有這樣的說法。 – TheBlackCat 2015-04-01 14:00:46

回答

1

這種方法我都試過最快:

foo = foobar2.clip_lower(0) 
foo = foo['var1']+foo['var2']-foo['var3']-foo['var4'] 

這種方法是一點點慢一點:

foo = foobar2.clip_lower(0) 
foo['var3']*=-1 
foo['var4']*=-1 
foo = foo.sum(axis=1) 

您還可以使用apply方法一襯墊,其比您的方法更簡單,更清晰,但速度也更慢:

foo = foobar2.clip_lower(0).apply(lambda x: x['var1']+x['var2']-x['var3']-x['var4'], axis=1) 
+0

好主意。有時候複製比選擇更快。 – FooBar 2015-04-01 14:20:33