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

基于有效值统计DataFrame指定值占比并生成聚合交叉表

实现方案(Python + Pandas)

以下是可直接运行的完整实现代码:

import pandas as pd
import numpy as np

# --------------------------
# 1. 构造原始测试数据(如果是从文件读取可替换为pd.read_csv等方法)
# --------------------------
raw_data = {
    "id": list(range(1, 11)),
    "a1_l1": [1,1,2,5,5,5,5,2,3,3],
    "a2_l1": [5]*10,
    "a3_l1": [3,3,3,3,2,2,2,2,1,1],
    "a1_l2": [1,1,5,5] + [np.nan]*6,
    "a2_l2": [2,2,5,5] + [np.nan]*6,
    "a3_l2": [3,3,3,3] + [np.nan]*6
}
df = pd.DataFrame(raw_data)

# --------------------------
# 2. 核心计算逻辑
# --------------------------
# 移除不需要的id列
df_calc = df.drop(columns=["id"])

# 宽表转长表,自动过滤空值记录
df_long = df_calc.melt(var_name="col_name", value_name="value").dropna(subset=["value"])

# 拆分列名得到a维度和l维度
df_long[["a_dim", "l_dim"]] = df_long["col_name"].str.split("_", expand=True)

# 分组计算5的占比,再转成交叉表结构
result = df_long.groupby(["a_dim", "l_dim"]).apply(
    lambda group: (group["value"] == 5).sum() / group["value"].count()
).unstack()

# 清理索引名匹配要求的输出格式
result.index.name = None
result.columns.name = None

运行后输出result即可得到目标汇总表:

l1   l2
a1  0.4  0.5
a2  1.0  0.5
a3  0.0  0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:03