You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现类似R中mutate()的死亡/病例比率计算?

添加死亡数/病例数比率变量的实现方法

一、计算当日死亡/当日病例比率(单行列运算)

不需要使用transform(),直接对deaths和cases列做矢量化运算即可,同时要处理病例数为0的情况避免除以零错误:

# 生成当日死亡/病例比率列,病例数为0时设为NaN
data1['death_case_ratio'] = data1['deaths'] / data1['cases'].replace(0, float('nan'))

这样处理后,所有当日病例数为0的行,比率值会显示为NaN,既避免运算报错也符合数据逻辑。

二、计算国家累计死亡/累计病例比率(分组运算)

如果你的需求是按国家计算累计死亡数与累计病例数的比率,可结合groupby实现,以下两种方式可选:

方法1:直接用累计函数(简洁高效)

# 按国家分组计算累计死亡、累计病例
data1['cum_deaths'] = data1.groupby('countriesandterritories')['deaths'].cumsum()
data1['cum_cases'] = data1.groupby('countriesandterritories')['cases'].cumsum()
# 计算累计比率,处理除零情况
data1['cum_death_case_ratio'] = data1['cum_deaths'] / data1['cum_cases'].replace(0, float('nan'))

方法2:用transform执行自定义分组运算

如果需要更复杂的分组逻辑,可通过transform()调用自定义函数:

def calculate_cumulative_ratio(group):
    group['cum_deaths'] = group['deaths'].cumsum()
    group['cum_cases'] = group['cases'].cumsum()
    group['cum_death_case_ratio'] = group['cum_deaths'] / group['cum_cases'].replace(0, float('nan'))
    return group

# 按国家分组应用函数,生成累计比率列
data1 = data1.groupby('countriesandterritories').apply(calculate_cumulative_ratio)

注:transform()更适合将分组计算结果广播回原数据行的场景,单纯的累计计算用cumsum()会更高效。

内容的提问来源于stack exchange,提问作者nur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:45:05