繁体   English   中英

Python:如何通过将 Dataframe 中的 2 列与循环相乘来仅替换列中的 0 值?

[英]Python: How to replace only 0 values in a column by multiplication of 2 columns in Dataframe with a loop?

这是我的 Dataframe:

df={'pack':[2,2,2,2], 'a_cost':[10.5,0,11,0], 'b_cost':[0,6,0,6.5]}

它应该如下所示:

这个

此时您会发现a_costb_cost列有 0,而其他列有值。 我希望我的 function 遵循这个逻辑......

for i in df.a_cost:
    if i==0:
       b_cost(column):value *(multiply) pack(column):value
       replace 0 with this new multiplied value (example: 6.0*2=12)
for i in df_b.cost:
    if i==0:
       a_cost(column):value /(divide) pack(column):value
       replace 0 with this new divided value (example: 10.5/2=5.25)

我无法弄清楚如何成功编写此逻辑......这是预期的output:

数据框

Output 代码:

df={'pack':[2,2,2,2], 'a_cost':[10.5,12.0,11,13.0], 'b_cost':[5.25,6,5.50,6.5]}

非常感谢您的帮助!

国际大学联合会,

df.loc[df.a_cost.eq(0), 'a_cost'] = df.b_cost * df.pack
df.loc[df.b_cost.eq(0), 'b_cost'] = df.a_cost / df.pack

您还可以使用maskfillna

df['a_cost'] = df.a_cost.mask(df.a_cost.eq(0)).fillna(df.b_cost * df.pack)
df['b_cost'] = df.b_cost.mask(df.b_cost.eq(0)).fillna(df.a_cost / df.pack)

按照评论更新,您可以在mask中使用other

df['a_cost'] = df.a_cost.mask(df.a_cost.eq(0), other=df.b_cost * df.pack)

另请注意,一旦您已经在a_cost列中填写了0 ,则不需要第二次过滤。 也就是说,我们可以这样做:

df['b_cost'] = df.a_cost / df.pack

在这两种方法的第一个命令之后。

Output:

   pack  a_cost  b_cost
0     2    10.5    5.25
1     2    12.0    6.00
2     2    11.0    5.50
3     2    13.0    6.50

尝试这个:

df['a_pack'] = df.apply(lambda x: x['b_cost']*x['pack'] if x['a_cost'] == 0 and x['b_cost'] != 0 else x['a_cost'], axis = 1)

df['b_pack'] = df.apply(lambda x: x['a_cost']/x['pack'] if x['b_cost'] == 0 and x['a_cost'] != 0 else x['b_cost'], axis = 1)
import numpy as np
df = pd.DataFrame({'pack':[2,2,2,2], 'a_cost':[10.5,0,11,0], 'b_cost':[0,6,0,6.5]})

df['a_cost'] = np.where(df['a_cost']==0, df['pack']*df['b_cost'], df['a_cost'])
df['b_cost'] = np.where(df['b_cost']==0, df['a_cost']/df['pack'], df['b_cost'])

print (df)
#pack  a_cost  b_cost
#0     2    10.5     5.25
#1     2    12.0     6.0
#2     2    11.0     5.50
#3     2    13.0     6.5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM