如何用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
相关产品推荐
相关产品推荐

