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

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_b
  • reset_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就是:

cmean_acounts_b
x2.01
y4.02

完全符合你要的样式哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:43:11