熊猫:有条件地添加

时间:2015-04-01 13:50:54

标签: python pandas

我有一组带有一组列的数据框,我想在其上执行条件操作,如下所示:

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,并减去var3var4 - 只要这些变量是正数,因为负变量表示缺失值和类似在我的数据集中。这段代码有效,但速度很慢。有没有更有效的方法来做到这一点?

1 个答案:

答案 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)