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

如何用Pandas按mode分组统计signal分布并获取各mode总数?

按mode统计signal的分布总数

现有如下包含id、signal、mode列的Pandas DataFrame:

import pandas as pd

data = pd.DataFrame({'id': [9,9,9,2,2,7,7,7,5,8,8,4,4,3,3,3,
        1,1,1,1,1,6,6,6,6,6,10,11,11,11,11],
 'signal': [1,3,5,7,9,13,17,27,5,1,5,5,11,3,7,11,6,
            8,12,14,18,1,3,5,111,115,57,9,21,45,51],
 'mode': [0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,
          2,2,3,3,3,3,3,3,3,3,3,3]
 })

# 查看前5行
print(data.head())

输出:

id  signal  mode
0   9       1     0
1   9       3     0
2   9       5     0
3   2       7     0
4   2       9     0

需要得到按mode分组的signal总数,目标结果如下:

mode  total
0      8
1      5
2      8
3     10

解决方案

你之前用data.groupby('signal')['mode'].value_counts()是按signal分组统计mode的出现次数,方向有误。正确做法是按mode分组,统计每组的行数(即signal的数量),以下是几种实现方式:

方法1:groupby+size

直接按mode分组后统计每组大小:

result = data.groupby('mode').size().reset_index(name='total')
print(result)

输出:

mode  total
0     0      8
1     1      5
2     2      8
3     3     10

方法2:value_counts直接统计mode出现次数

更简洁的方式,直接对mode列做值计数后转换格式:

result = data['mode'].value_counts().reset_index().rename(columns={'index': 'mode', 'mode': 'total'})
# 按mode排序(可选,保证结果按mode顺序排列)
result = result.sort_values('mode').reset_index(drop=True)
print(result)

输出与方法1一致。

方法3:groupby+count

统计signal列的非空值数量(无缺失值时和size效果相同):

result = data.groupby('mode')['signal'].count().reset_index(name='total')
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:52:28