【问题标题】:How to get the mean of a subset of rows after using groupby?使用groupby后如何获得行子集的平均值?
【发布时间】:2016-07-16 11:00:08
【问题描述】:

我想在我的数据框中的一个特定列中获取特定行子集的平均值。

我可以使用

df['C'].iloc[2:9].mean()

从原始数据框中获取我想要的特定行的平均值,但我的问题是我想在使用 groupby 操作后执行此操作。

我正在建设

df.groupby(["A", "B"])['C'].mean()

一旦我按列 A 和 B 分组,就会在“C”中返回 11 个值,我得到这 11 个值的平均值。我实际上只想获得第 3 到第 9 个值的平均值,但理想情况下我想要做的是

df.groupby(["A", "B"])['C'].iloc[2:9].mean()

这将为每组 A、B 从 C 列返回这 11 个值,然后找到第 3 到第 9 个值的平均值,但我知道我不能这样做。该错误建议使用 apply 方法,但我似乎无法弄清楚。

任何帮助将不胜感激。

【问题讨论】:

  • 为什么不将行子集到另一个数据框并完整运行groupby() 意味着那里?

标签: python pandas


【解决方案1】:

您可以在 groupby 之后使用 agg 函数,然后在每个组中设置子集并取 mean

df = pd.DataFrame({'A': ['a']*22, 'B': ['b1']*11 + ['b2']*11, 'C': list(range(11))*2})
# A dummy data frame to demonstrate

df.groupby(['A', 'B'])['C'].agg(lambda g: g.iloc[2:9].mean())

# A   B 
# a  b1    5
#    b2    5
# Name: C, dtype: int64 

【讨论】:

    【解决方案2】:

    试试这个变种:

    for key, grp in df.groupby(["A", "B"]):
        print grp['C'].iloc[2:9].mean()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-17
      • 2020-05-08
      • 2021-07-13
      • 2021-01-03
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2022-08-14
      相关资源
      最近更新 更多