根据条件迭代熊猫列

Pri*_*han 6 python numpy dataframe pandas

想根据计数、A 和 B 的值计算 C

示例 df:

数数 一种 C
是的 23 2
23 1
是的 41 6

我想要的结果

数数 一种 C
是的 23 2 46
23 1 0
是的 41 6 246

仅当计数值 = yes 时才计算 C = A*B 否则 C 值 =0 即应跳过计数的 nan 值

任何帮助都是可观的

我正在尝试这个

for ind, row in df.iterrows():
    if df['count'] == 'yes':
        df.loc[ ind, 'C'] =row['A'] *row['B']
    else:
        df.loc[ ind, 'C'] =0
Run Code Online (Sandbox Code Playgroud)

但它给出了错误: ValueError: 系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

ano*_*n01 1

*如果您正确指定要设置的索引,则pandas 会对此操作进行重载:

mask = df["count"].notna()
df.loc[mask, "C"] = df["A"]*df["B"]
df.C.fillna(0, inplace=True)
Run Code Online (Sandbox Code Playgroud)

或者稍微简洁一点的版本会惹恼你的同事:

df["C"] = df["A"]*df["B"]*(df["count"].notna())
Run Code Online (Sandbox Code Playgroud)

最后,df["count"].notna()返回一个布尔列,该列与数字列相乘时转换为数字类型。简洁但同样清晰。

输出为:

  count   A  B      C
0   yes  23  2   46.0
1   NaN  23  1      0
2   yes  41  6  246.0
Run Code Online (Sandbox Code Playgroud)

这将比 iterrows性能更高.apply并且性能更高。