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

Pandas中groupby方法统计结果异常问题求助

问题排查方案

以下是针对分组统计结果与单独统计不一致的排查步骤:

1. 检查缺失值

分组统计时,groupby默认会排除包含NaN的行,但单独统计sentiment.value_counts()只会排除sentiment列的NaN。如果brand列存在NaN,那么这些行的sentiment会被value_counts统计,但不会出现在分组结果中,导致总和不符。

执行以下代码确认缺失值情况:

# 统计brand和sentiment列的缺失值数量
print(brand_sentiment_train[['brand', 'sentiment']].isna().sum())

# 统计同时无缺失的行数量,这个数应等于分组结果的总和
valid_rows = brand_sentiment_train[['brand', 'sentiment']].notna().all(axis=1).sum()
print(f"同时无缺失的行数: {valid_rows}")
print(f"分组结果总和: {pivot_df.sum().sum()}")

2. 验证数据一致性

对比单独统计的总和与数据集总行数,确认是否有sentiment缺失值影响结果:

vc_sum = brand_sentiment_train.sentiment.value_counts().sum()
total_rows = len(brand_sentiment_train)
print(f"sentiment非缺失行数: {vc_sum}")
print(f"数据集总行数: {total_rows}")

如果vc_sum < total_rows,说明存在sentiment为NaN的行,这些行不会被value_counts统计,也不会出现在分组结果中。

3. 检查文本值的隐藏差异

如果sentiment列存在看似相同但实际有差异的文本(比如空格、大小写、特殊字符),会导致分组时被拆分为不同类别,而单独统计时可能被误判为同一类。

执行以下代码检查唯一值:

# 查看原始唯一值
print("原始sentiment唯一值:", brand_sentiment_train.sentiment.unique())
# 去除首尾空格后查看唯一值
print("去除空格后的sentiment唯一值:", brand_sentiment_train.sentiment.str.strip().unique())

如果两者结果不同,说明存在空格等隐藏字符,需要先清洗数据再统计:

# 清洗sentiment列
brand_sentiment_train['sentiment'] = brand_sentiment_train['sentiment'].str.strip()
# 重新执行统计
vc_clean = brand_sentiment_train.sentiment.value_counts()
pivot_clean = brand_sentiment_train.groupby(['brand', 'sentiment']).size().unstack(fill_value=0)

4. 确认代码执行顺序

确保在执行value_counts和groupby之间,没有对brand_sentiment_train进行过过滤、修改等操作(比如dropna、切片、赋值),这些操作会导致两次统计的数据集不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:43:14