求助:为已unstack的DataFrame添加总计列的实现方案
问题:为Unstack后的DataFrame添加总计列
原始已unstack的DataFrame结构:
churn_label No Yes under_30 No 4077 1564 Yes 1097 304
目标格式(添加总计列后):
churn_label No Yes Total under_30 No 4077 1564 5174 Yes 1097 304 1868
尝试的错误代码:
data_df = customer_churn_df.groupby(["under_30", "churn_label"]).count() data_df["total_count"] = data_df["customer_id"].unstack(level = -1).sum() data_df["total_count"]
得到的结果:
under_30 churn_label No No NaN Yes NaN Yes No NaN Yes NaN
正确实现方法
方法一:直接对Unstack后的DataFrame按行求和
如果数据已经是unstack后的状态(under_30为索引,No/Yes为列),直接调用sum(axis=1)计算每行总和:
# 假设unstack后的DataFrame变量名为unstacked_df unstacked_df['Total'] = unstacked_df.sum(axis=1)
方法二:从GroupBy阶段直接生成带总计的结果
如果还未完成unstack操作,可整合分组、unstack、求和步骤,避免索引不匹配问题:
# 分组计数后直接unstack data_df = customer_churn_df.groupby(["under_30", "churn_label"])["customer_id"].count().unstack() # 添加总计列 data_df['Total'] = data_df.sum(axis=1)
错误原因说明
你之前的代码中,data_df["customer_id"].unstack(level=-1).sum()返回的是仅以under_30为索引的求和结果,但原data_df是双重索引(under_30+churn_label),两者索引不匹配,导致赋值后全部为NaN。
内容的提问来源于stack exchange,提问作者Erick Vivas
相关产品推荐
相关产品推荐

