熊猫:添加有条件
问题描述:
我有一组列,在其上欲如下来执行有条件的操作的数据帧:熊猫:添加有条件
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']
即,我要总结var1
,var2
,和减法var3
,var4
- 无论何时这些变量为正数,因为负变量表示我的数据集中缺失值和类似数据。此代码有效,但速度很慢。有没有更有效的方法来做到这一点?
答
这种方法我都试过最快:
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
您是否尝试过使用case语句? – 2015-04-01 13:53:22
Python没有这样的说法。 – TheBlackCat 2015-04-01 14:00:46