这不是一个很好的问题,但在这里: 我正在组合DataFrame的几列进行非常简单的计算,但前提是只有一列具有特定值。这个想法是:
if df.x==1:
df.y = df.y - df.a/df.b
现在当然循环很慢,所以我在DataFrame的子集上执行此操作,但这很快就会非常冗长:
df.loc[df.x==1, 'y'] = df.loc[df.x==1, 'y'] - df.loc[df.x==1, 'a']/df.loc[df.x==1, 'b']
我觉得有一种更好的方法可以做到这一点,任何想法?
答案 0 :(得分:2)
正如@EdChum在评论中暗示的那样,您可以直接使用.loc
。您可以使用-=
表示法进一步简化。
df = pd.DataFrame({'x': [1, 2, 3],
'y': [1, 2, 3],
'a': [1, 2, 3],
'b': [2, 2, 2]})
>>> df
a b x y
0 1 2 1 1
1 2 2 2 2
2 3 2 3 3
df.loc[df.x==1, 'y'] -= df.a / df.b
>>> df
a b x y
0 1 2 1 0.5
1 2 2 2 2.0
2 3 2 3 3.0