2016-07-16 48 views
1

我想獲得我的數據框中某個特定列中行的特定子集的平均值。如何在使用groupby之後獲得行子集的平均值?

我可以使用

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

得到的只是我從原來的數據幀所需的特定行的意思,但我的問題是,我想用GROUPBY操作後,執行此操作。

我對

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

,從而有可能是在「C」回來一次,我GROUP BY列A和B,我得到這11個值的平均值11個價值觀建設。其實,我只是想通過第九值來取得第三個的平均水平,但這樣的理想是什麼我希望做的是

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

這從C柱返回的11個值對於每個組A,B,然後將找到第3到第9個值的平均值,但我知道我不能這樣做。錯誤建議使用apply方法,但我似乎無法弄清楚。

任何幫助,將不勝感激。

+0

爲什麼不子集行到另一個數據框和運行完整'groupby()'是指那裏嗎? – Parfait

回答

2

試試這個變種:

for key, grp in df.groupby(["A", "B"]): 
    print grp['C'].iloc[2:9].mean() 
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