使用np.where根据条件为列分配值

时间:2018-03-09 03:53:45

标签: python pandas numpy

虽然这个问题看起来非常相似,但我被困了。以下是数据样本。我想添加productView和Order的数量,其中productView<订购。

           productView  order
userId      
A                4.5    5.0
B               1.5     2.5
C               4.0     2.0
D                2.0    3.0

我尝试了以下代码,但抛出错误

order_Segemnt.productView=np.where(order_Segment[order_Segment.productView< order_Segment.order]['productView'],order_Segment.productView+order_Segment.order, order_Segment.productView)

我得到的错误就是这个

Error- ValueError: operands could not be broadcast together with shapes (408,) (7464,) (7464,) 

如何实现我的目标?

2 个答案:

答案 0 :(得分:4)

语法 -

np.where(condition, value1, value2)

解决方案 -

np.where(
   df.productView < df.order, df.productView + df.order, df.productView
)
array([9.5, 4. , 4. , 5. ])

作为一种有效的替代方案,您可以使用loc

m = df.productView < df.order
df.loc[m, 'productView'] = df.loc[m, ['productView', 'order']].sum(1)

答案 1 :(得分:1)

也许mask

df['New']=df.productView.mask(df.order>df.productView,df.sum(1))
df
Out[271]: 
        productView  order  New
userId                         
A               4.5    5.0  9.5
B               1.5    2.5  4.0
C               4.0    2.0  4.0
D               2.0    3.0  5.0
相关问题