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
相关产品推荐
相关产品推荐

