R语言分类变量重编码及多州组间统计对比实现问题咨询
问题1:分类变量重编码实现
直接通过numpy.where或者pandas.map都可以快速完成重编码,生成新列:
方法1:np.where实现(规则简单时推荐)
import numpy as np # 判定逻辑:回答为No时赋值0,其余(Yes/Maybe)赋值1 df['喜欢蓝色标识'] = np.where(df['你是否喜欢蓝色?'] == 'No', 0, 1)
方法2:map映射实现(规则复杂时扩展性更好)
# 定义映射规则 encode_map = {'Yes':1, 'Maybe':1, 'No':0} df['喜欢蓝色标识'] = df['你是否喜欢蓝色?'].map(encode_map).astype(int) # 若存在不在规则内的异常值,可新增fillna处理:.fillna(0, downcast='infer')
问题2:多州组间统计高效实现
不需要拆分数据集,直接用pandas.groupby聚合即可完成全量州的统计,15个州的计算量几乎无性能损耗:
步骤1:一键统计所有州的No回答占比
你的样例数据中已经预生成了No的0-1标识列,直接分组求均值即为对应占比:
# 输出结果为所有州对应的No回答占比表 state_no_stats = df.groupby('州', as_index=False)['No'].agg( 总样本数='count', No回答占比='mean' )
如果没有预生成的No列,直接从原回答列统计即可:
state_no_stats = df.groupby('州', as_index=False)['你是否喜欢蓝色?'].agg( 总样本数='count', No回答占比=lambda x: (x == 'No').mean() )
步骤2:特定州对比
如果需要单独对比加利福尼亚州和亚利桑那州,直接过滤统计结果即可:
compare_res = state_no_stats[state_no_stats['州'].isin(['加利福尼亚', '亚利桑那'])]
可选:组间差异显著性检验
如果需要验证不同州的回答分布是否存在统计显著差异,可直接生成交叉表做卡方检验:
from scipy.stats import chi2_contingency # 生成州-回答的交叉频数表 cross_table = pd.crosstab(df['州'], df['你是否喜欢蓝色?']) chi2_val, p_val,自由度,预期频数 = chi2_contingency(cross_table) # p_val < 0.05即可认为不同州的回答分布存在显著差异
内容的提问来源于stack exchange,提问作者JSON7555
相关产品推荐
相关产品推荐

