Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 简化表达_Python_Pandas - Fatal编程技术网

Python 简化表达

Python 简化表达,python,pandas,Python,Pandas,这不是一个好问题,但问题是: 我正在做一个非常简单的计算,结合一个数据帧的两列,但前提是其中一列具有特定的值。这个想法是: if df.x==1: df.y = df.y - df.a/df.b 现在循环当然很慢,所以我在数据帧的子集上做这个,但是这很快就会变得非常详细: df.loc[df.x==1, 'y'] = df.loc[df.x==1, 'y'] - df.loc[df.x==1, 'a']/df.loc[df.x==1, 'b'] 我觉得有一种更好的方法可以做到这一点,

这不是一个好问题,但问题是:
我正在做一个非常简单的计算,结合一个数据帧的两列,但前提是其中一列具有特定的值。这个想法是:

if df.x==1:
    df.y = df.y - df.a/df.b
现在循环当然很慢,所以我在数据帧的子集上做这个,但是这很快就会变得非常详细:

df.loc[df.x==1, 'y'] = df.loc[df.x==1, 'y'] - df.loc[df.x==1, 'a']/df.loc[df.x==1, 'b']

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

正如@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

难道df.loc[df.x==1,'y']=df['y']-df['a']/df['b'].不起作用吗?我想你是对的-我不知怎么想,我必须确保右手边的所有物体与左手边的物体长度相同,但似乎可以只对RHS上的所有对象执行此操作,只对LHS上的子集进行写入…RHS将与LHS上的索引对齐,因为我们在这里使用
loc
,它确保将分配正确的行