如何在Pandas中按一列分组统计另一列唯一值的频率?
解决方案
方法1:用pd.crosstab快速生成(推荐)
这是最简洁的方式,直接按Time和Type做交叉统计,自动生成目标格式的统计表:
import pandas as pd # 假设你的数据存储在DataFrame df中 result = pd.crosstab(df['Time'], df['Type'])
执行后result就是你需要的频率统计表:行是唯一的Time值,列是所有Type的唯一值,单元格对应组合的出现次数,缺失的组合会自动填充为0。
方法2:用groupby + unstack实现
如果要沿用你提到的groupby思路,可按以下步骤操作:
- 按
Time和Type分组,统计每组的数量 - 将
Type从行索引转换为列(unstack操作) - 把空值(NaN)填充为0,确保所有
Type列都存在
# 分组计数 grouped = df.groupby(['Time', 'Type']).size().reset_index(name='Count') # 转换为宽表格式 result = grouped.pivot(index='Time', columns='Type', values='Count').fillna(0).astype(int)
两种方法都能生成你截图右侧的样式,方法1更简洁高效,适合大多数场景。
内容的提问来源于stack exchange,提问作者user20977195
相关产品推荐
相关产品推荐

