R语言分组汇总:按变量c求col a均值并添加b类型出现次数列
搞定分组聚合的双指标需求!
嘿,我来帮你解决这个问题~ 你要的按c分组后计算a的均值,同时统计每个组内b类型的出现次数,其实用pandas的groupby配合agg()方法就能一步到位,不用拆分操作再合并,完美匹配你要的df2样式。下面分两种常见场景给你具体代码:
场景1:统计分组内b列等于特定值的次数
如果你的counts_b是要统计某个特定b类型(比如b='yes'或者b=1这类具体值)的出现次数,代码可以这么写:
import pandas as pd # 基于你的原始数据表df生成df2 df2 = df.groupby('c').agg( mean_a=('a', 'mean'), # 计算每个c分组下a的均值,并重命名列 counts_b=('b', lambda x: (x == '目标值').sum()) # 替换'目标值'为你要统计的b类型 ).reset_index()
小解释:
('a', 'mean'):直接对分组后的a列求均值,并用mean_a作为新列名lambda x: (x == '目标值').sum():先判断每个组的b列元素是否等于你要统计的目标值(返回布尔数组),再求和得到次数,命名为counts_breset_index():把分组键c从索引变回普通列,和你要的df2结构完全一致
场景2:统计分组内b列非缺失值的次数
如果counts_b是要统计每个分组里b列不为空的行数,代码可以简化成这样:
df2 = df.groupby('c').agg( mean_a=('a', 'mean'), counts_b=('b', 'count') # count方法会自动忽略空值,直接统计非缺失的行数 ).reset_index()
如果你已经写了部分代码
假设你之前的代码是类似这样的:
# 你已完成的部分代码 partial_df = df.groupby('c')['a'].mean().rename('mean_a').reset_index()
那直接把它改成上面的agg()写法就行,一步生成包含两个指标的df2,省得再写合并的代码,效率更高。
举个实际例子验证
假设你的原始df是这样的:
df = pd.DataFrame({ 'c': ['x', 'x', 'y', 'y', 'y'], 'a': [1, 3, 2, 4, 6], 'b': ['yes', 'no', 'yes', 'yes', 'no'] })
用场景1的代码(统计b='yes'的次数),得到的df2就是:
| c | mean_a | counts_b |
|---|---|---|
| x | 2.0 | 1 |
| y | 4.0 | 2 |
完全符合你要的样式哦~
内容的提问来源于stack exchange,提问作者Giulia
相关产品推荐
相关产品推荐

