Pandas groupby - 求前 10 项的平均值

Pandas groupby - Find mean of first 10 items

我每组有 30 个项目。

为了找到所有项目的平均值,我使用了这段代码。

y = df[["Value", "Date"]].groupby("Date").mean()

那个 return 是这样的值。

Date                  Value
       
2020-01-01 00:30:00   7172.36
2020-01-01 01:00:00   7171.55
2020-01-01 01:30:00   7205.90
2020-01-01 02:00:00   7210.24
2020-01-01 02:30:00   7221.50

但是,我想找到组中前 10 个项目的平均值,而不是整个项目。

y1 = df[["Value", "Date"]].groupby("Date").head(10).mean()

那个代码 return 只有一个 Value 而不是 pandas 系列。

所以我收到这样的错误。

AttributeError: 'numpy.float64' object has no attribute 'shift'

获取 pandas 系列而不是单个值的正确方法是什么?

尝试

# slice the first 10 and average
y1 = df.groupby("Date")["Value"].apply(lambda x: x.iloc[:10].mean())

你可以试试

y1 = df[["Value", "Date"]].groupby("Date").apply(lambda g: g['Value'].head(10).mean())
print(y1)

Date
2020-01-01 00:30:00    7172.36
2020-01-01 01:00:00    7171.55
2020-01-01 01:30:00    7205.90
2020-01-01 02:00:00    7210.24
2020-01-01 02:30:00    7221.50
dtype: float64

.groupby("Date").head(10).mean()groupby.head()、returnsDataFrame中,.mean()操作的是整个DataFrame,而不是组。