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
,它确保将分配正确的行