如何仅对0到634行的total_deaths除以total_cases生成CFR新列
你原来的代码是对整列进行运算赋值,所以会覆盖所有行的CFR值,只需锁定0-634行的区间做运算和赋值即可:
修正后代码
如果你的数据行索引是默认的从0开始的连续整数,用loc写法:
import numpy as np # 先初始化CFR列,未指定计算的行默认设为空值 data['CFR'] = np.nan # 仅对0到634行计算病死率 data.loc[0:634, 'CFR'] = np.round( data.loc[0:634, 'total_deaths'] / data.loc[0:634, 'total_cases'] * 100, decimals=3 )
如果你的行索引不是默认连续整数,需要按行位置选取,用iloc写法(注意iloc切片为左闭右开,选0-634行需要写0:635):
import numpy as np data['CFR'] = np.nan # 获取各列的位置索引 cfr_idx = data.columns.get_loc('CFR') death_idx = data.columns.get_loc('total_deaths') case_idx = data.columns.get_loc('total_cases') data.iloc[0:635, cfr_idx] = np.round( data.iloc[0:635, death_idx] / data.iloc[0:635, case_idx] * 100, decimals=3 )
注意事项
- 计算前建议先过滤
total_cases为0的行,避免出现除零错误,可在运算前加筛选条件:# 以loc写法为例,iloc同理 valid_data = data.loc[0:634].query("total_cases != 0") data.loc[valid_data.index, 'CFR'] = np.round(valid_data['total_deaths'] / valid_data['total_cases'] * 100, 3)
内容的提问来源于stack exchange,提问作者Luci Fern
相关产品推荐
相关产品推荐

