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

关于pandas中grouped[l].size()结果的两处疑问求助

关于pandas中groupby['l'].size()的疑问

先看这段代码:

f = 10
n = 250
np.random.seed(100)
x = np.random.randint(0,2,(n,f))
y = np.random.randint(0,2,n)
fcols = [f'f{_}' for _ in range(f)]
data = pd.DataFrame(x, columns = fcols)
data['l'] = y
grouped = data.groupby(list(data.columns))
print(grouped['l'].size())

运行后输出:

f0  f1  f2  f3  f4  f5  f6  f7  f8  f9  l
0   0   0   0   0   0   0   1   1   1   1    1
                        1   0   1   0   0    1
                                        1    1
                                    1   1    1
                    1   0   0   0   0   0    1
                                            ..
1   1   1   1   1   0   0   0   0   0   1    1
                            1   0   0   0    1
                        1   1   0   0   1    1
                    1   1   0   0   0   0    1
                            1   0   1   1    2
Name: l, Length: 239, dtype: int64

存在两个困惑:

  • l的取值仅为0或1,原以为分组后结果长度应为2,为何实际是239?
  • 输出中多个f列显示为空值,这是为什么?

问题1解答

你这里的分组依据是所有列(list(data.columns)包含了f0到f9以及l列),不是只按l列分组。pandas会把所有f列取值完全相同且l值也相同的行归为一组。

因为你生成的是250行含10个0/1特征列+1个0/1标签列的随机数据,大部分行的「特征组合+标签」都是唯一的,只有少数组合重复出现,所以最终分组数是239(说明有11组是重复的,比如最后一行的size=2,代表该组合出现了2次)。如果要仅按l分组,代码需改成grouped = data.groupby('l'),此时结果长度就是2,对应l=0和l=1两组的总行数。

问题2解答

输出里的“空白”不是真的空值,是pandas的分层索引缩进优化显示。当相邻行的某一列索引值和上一行完全相同时,pandas会省略重复值,用空白代替,让输出更简洁易读。

比如第二行的f0到f4列和第一行完全一致(都是0),所以这些列就显示空白,只展示变化的f5到l列的值。你可以用grouped['l'].size().reset_index()把分层索引转为普通DataFrame,就能看到每一行的所有列都有完整的0/1取值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:09:51