我有一组带有一组列的数据框,我想在其上执行条件操作,如下所示:
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
- 只要这些变量是正数,因为负变量表示缺失值和类似在我的数据集中。这段代码有效,但速度很慢。有没有更有效的方法来做到这一点?
答案 0 :(得分: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)