Python 根据条件对列进行迭代
要根据count、A和B的值计算C吗 样本df: 计数 A. B C 对 23 2. 楠 楠 23 1. 楠 对 41 6. 楠 只要用这个:-Python 根据条件对列进行迭代,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,要根据count、A和B的值计算C吗 样本df: 计数 A. B C 对 23 2. 楠 楠 23 1. 楠 对 41 6. 楠 只要用这个:- df['C']=df[df['count']=='yes']['C'].fillna(value=df['A']*df['B']) df['C']=df['C'].fillna(0) 试试这个:- for ind, row in df.iterrows(): if row['count'] == 'yes': df.loc[
df['C']=df[df['count']=='yes']['C'].fillna(value=df['A']*df['B'])
df['C']=df['C'].fillna(0)
试试这个:-
for ind, row in df.iterrows():
if row['count'] == 'yes':
df.loc[ ind, 'C'] =row['A'] *row['B']
else:
df.loc[ ind, 'C'] =0
如果您正确指定了要设置的索引,则会为该操作编写
df['count']=='yes'
而不是行['count']=='yes'
重载*
,从而导致出现错误:
mask = df["count"].notna()
df.loc[mask, "C"] = df["A"]*df["B"]
df.C.fillna(0, inplace=True)
或者是一个会惹恼你同事的更简洁的版本:
df["C"] = df["A"]*df["B"]*(df["count"].notna())
最后,df[“count”].notna()返回一个布尔列,当与数值列相乘时,该列将转换为数值类型。简洁但同样清晰
以下任一项的输出:
count A B C
0 yes 23 2 46.0
1 NaN 23 1 0
2 yes 41 6 246.0
这将比更有效。应用
,比ItErrors更有效。您还可以使用:
df['C']=np.where(df['count']=='yes',df.A*df.B,0)
另一种选择:
df.C = df.A.mul(df.B).where(df['count'].eq('yes')).fillna(0)
df
# count A B C
#0 yes 23 2 46.0
#1 NaN 23 1 0.0
#2 yes 41 6 246.0
或者,如果您更喜欢运算符:df.C=(df.A*df.B).其中(df['count']='yes').fillna(0)
您可以尝试将A
与B
相乘,并使用掩码NaN
值
情况并非如此applied@maziyank更新
df.C = df.A.mul(df.B).where(df['count'].eq('yes')).fillna(0)
df
# count A B C
#0 yes 23 2 46.0
#1 NaN 23 1 0.0
#2 yes 41 6 246.0
df['C'] = df[['A', 'B']].prod(axis=1).mask(df['count'].isna(), 0)
count A B C
0 yes 23 2 46
1 NaN 23 1 0
2 yes 41 6 246