简化大熊猫表达

时间:2015-09-03 17:18:36

标签: python pandas

这不是一个很好的问题,但在这里: 我正在组合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']

我觉得有一种更好的方法可以做到这一点,任何想法?

1 个答案:

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