基于dplyr与自定义函数实现带权重的交叉表计算
自定义加权交叉表函数
crosstab_w 实现 假设使用pandas处理数据集,以下是整合手动步骤后的自定义函数实现:
import pandas as pd def crosstab_w(df): # 1. 计算每个Speed分组下唯一ID的权重总和 speed_total_weights = df.groupby(['Speed', 'ID'])['Weight'].first().groupby('Speed').sum() # 2. 计算Speed-Key组合的加权总和,生成原始交叉表 cross_raw = df.groupby(['Speed', 'Key'])['Weight'].sum().unstack(fill_value=0) # 3. 将各列值除以对应Speed分组的总权重,得到加权频率交叉表 cross_norm = cross_raw.div(speed_total_weights, axis=0) return cross_norm
函数说明:
- 第一步:先按
Speed和ID分组,用first()确保每个ID在对应Speed组中只统计一次权重,再按Speed求和得到该分组的总权重。 - 第二步:按
Speed和Key分组对Weight求和,通过unstack()转成交叉表格式,缺失值填充为0。 - 第三步:用
div()方法将交叉表每行(对应一个Speed分组)除以该分组的总权重,完成归一化得到加权频率交叉表。
使用示例:
若数据集存储在data_df中,直接调用函数即可:
weighted_crosstab = crosstab_w(data_df)
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

