我试图写一个条件,希望在新列中获得每次访问的平均费用。但是,如果访问计数为0,则我想改用“ 1”,以便Visit_cost
不是无限。
我的方法抛出一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df
id Cost Visit
2 52 1
3 85 0
4 853 10
df['VISIT_COST'] = [df['Cost']/df['Visit'] if df['Visit'] != 0 else df['Cost']/1]
最终df:
id Cost Visit VISIT_COST
2 52 1 52
3 85 0 85
4 853 10 85.3
我认为这里最好是use numpy.where
,因为非常快:
df['VISIT_COST'] = np.where(df['Visit'] != 0, df['Cost']/df['Visit'], df['Cost'])
print (df)
id Cost Visit VISIT_COST
0 2 52 1 52.0
1 3 85 0 85.0
2 4 853 10 85.3
开箱即用的解决方案-用于替换0
以1
添加布尔掩码转换为整数:
df['VISIT_COST'] = df['Cost'].div(df['Visit'].eq(0).astype(int).add(df['Visit']))
print (df)
id Cost Visit VISIT_COST
0 2 52 1 52.0
1 3 85 0 85.0
2 4 853 10 85.3
详情:
print (df['Visit'].eq(0).astype(int))
0 0
1 1
2 0
Name: Visit, dtype: int32
print (df['Visit'].eq(0).astype(int).add(df['Visit']))
0 1
1 1
2 10
Name: Visit, dtype: int64
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句