You need to enable JavaScript to run this app. R语言中基于原始值出现次数重塑Dataframe生成Brand统计列
优惠活动
大模型
产品
解决方案
定价
更多

R语言中基于原始值出现次数重塑Dataframe生成Brand统计列

目标数据重塑实现逻辑

全程无需手动预设Brand列清单,可根据原始数据的数值动态匹配生成对应列,核心操作分为三个环节。

1. 宽表转标准化长格式

对采用qX_Y命名规则的原始列,拆分提取q1、q2这类分组标识,过滤空值后为后续统计做准备:

import pandas as pd
import numpy as np

# 还原给定的原始Dataframe
raw_df = pd.DataFrame(
    [
        [1, 2, 3, 1, 3, 4],
        [1, 3, np.nan, 1, 2, 3],
        [1, 4, np.nan, 2, np.nan, np.nan]
    ],
    columns=["q1_1", "q1_2", "q1_3", "q2_1", "q2_2", "q2_3"]
)

# 宽表转长格式
long_df = raw_df.melt(var_name="col_name", value_name="raw_value")
# 拆分列名提取分组维度
long_df["question_group"] = long_df["col_name"].str.split("_").str[0]
# 过滤空值、统一值类型
long_df = long_df.dropna(subset=["raw_value"])
long_df["raw_value"] = long_df["raw_value"].astype(int)

2. 分组频次统计与动态列生成

按分组维度统计每个原始数值的出现次数,转成宽表后按规则格式化列名,完全匹配动态生成列的需求:

# 分组统计频次,转宽表
final_df = (
    long_df.groupby("question_group")["raw_value"]
    .value_counts()
    .unstack(fill_value=0)
)
# 生成Brand前缀的动态列名
final_df.columns = [f"Brand_{col}" for col in final_df.columns]

结果验证

运行后输出的Dataframe结构与目标完全一致:

Brand_1  Brand_2  Brand_3  Brand_4
question_group                                 
q1                    3        1        2        1
q2                    2        2        2        1

该实现具备完全的动态适配能力:若后续原始数据中出现新的取值(如5),结果会自动新增Brand_5列,无需调整原有代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 14:54:04