我想获得数据帧中某个特定列的特定行子集的平均值。
我可以用
df['C'].iloc[2:9].mean()
从原始Dataframe中获取我想要的特定行的平均值,但我的问题是我想在使用groupby操作后执行此操作。
我正在建设
df.groupby(["A", "B"])['C'].mean()
在' C'中返回了11个值。一旦我按A列和B列分组,我得到这11个值的平均值。我实际上只想得到第3到第9个值的平均值,但理想情况下我想做的是
df.groupby(["A", "B"])['C'].iloc[2:9].mean()
对于A,B的每一组,这将从C列返回那11个值,然后找到第3到第9个值的平均值,但我知道我不能这样做。该错误建议使用apply方法,但我似乎无法弄明白。
任何帮助都将不胜感激。
答案 0 :(得分:4)
您可以在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
答案 1 :(得分:2)
尝试此变体:
for key, grp in df.groupby(["A", "B"]):
print grp['C'].iloc[2:9].mean()