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

计算dataframe中各business_id的FP=1数值占FP=0数值的百分比

按商家ID计算FP正负样本count比值实现

现有结构如下的DataFrame:

business_id  FP   count 
business_1    1    20
business_1    0    100
business_2    0    50

需求为对每个business_id,计算FP=1对应的count值除以同ID下FP=0对应的count值的比值,无对应样本时可根据需要设置默认值(示例中为避免除零错误返回0)。

方法1:分组自定义函数计算

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'business_id': ['business_1', 'business_1', 'business_2'],
    'FP': [1, 0, 0],
    'count': [20, 100, 50]
})

# 单分组内计算比值的函数
def calc_ratio(group):
    cnt_fp1 = group[group['FP'] == 1]['count'].sum()
    cnt_fp0 = group[group['FP'] == 0]['count'].sum()
    return cnt_fp1 / cnt_fp0 if cnt_fp0 != 0 else 0

# 按business_id分组计算得到结果
res = df.groupby('business_id').apply(calc_ratio).reset_index(name='fp_1_0_ratio')

运行输出结果:

business_id  fp_1_0_ratio
0  business_1           0.2
1  business_2           0.0

方法2:透视表实现(代码更简洁)

# 生成透视表,行为business_id,列是FP取值,值为count的求和结果
pivot_df = df.pivot_table(index='business_id', columns='FP', values='count', fill_value=0)
# 直接计算比值,自动处理缺失的FP取值
pivot_df['fp_1_0_ratio'] = pivot_df.get(1, 0) / pivot_df.get(0, 0).replace(0, pd.NA)
# 重置索引得到标准格式结果
res = pivot_df['fp_1_0_ratio'].reset_index()

该方法和方法1的输出结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:02