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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:22:04