Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据条件对列进行迭代_Python_Pandas_Dataframe_Numpy - Fatal编程技术网

Python 根据条件对列进行迭代

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[

要根据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[ 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