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()。
*如果您正确指定要设置的索引,则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并且性能更高。
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |