gpt4 book ai didi

python - Pandas 使用 apply 函数过滤年份并获取月份的平均值

转载 作者:行者123 更新时间:2023-11-28 16:55:44 24 4
gpt4 key购买 nike

在下面的数据框中,有三列年、月、值。我试图过滤掉低于某个阈值(即 2007 年)的年份值,然后获取分组月份的平均值。 (即第 9 个月在 2006、2001、2006 年(小于 2007 年)分别具有三个值,因此合计总数为 (2.9 +8 + 9)。我尝试了多种方法,但有些不对劲。现在的错误我得到的是“Keu error 'year'” 知道我做错了什么吗?提前致谢

df2 = pd.DataFrame({'year': [2005,2006,2007,2005,2008,2006,2004,2007,2001,2006], 'month': 
[7,9,12,7,9,8,6,2,9,9], 'vals': [1.2,2.9,3.5,4.3,1.3,1.7,2.6,4.3,8.0,9.0]})
print(df2)

def mn(x,ylt):
if x['year'] < ylt:
return x.mean()

df2.groupby('month')['vals'].apply(lambda x: mn(x,2007))

最佳答案

首先按 boolean indexing 过滤然后聚合 mean:

df = df2.loc[df2['year'] < 2007, 'vals'].groupby(df2['month']).mean().reset_index()
#alternative
#df = df2.loc[df2['year'] < 2007].groupby('month')['vals'].mean().reset_index()
print (df)
month vals
0 6 2.600000
1 7 2.750000
2 8 1.700000
3 9 6.633333

如果需要所有月份,也没有匹配添加Series.reindex按所有可能的唯一:

df = (df2.loc[df2['year'] < 2007, 'vals']
.groupby(df2['month'])
.mean()
.reindex(df['month'].unique())
.reset_index())
print (df)
month vals
0 2 NaN
1 6 2.600000
2 7 2.750000
3 8 1.700000
4 9 6.633333
5 12 NaN

你的函数应该通过过滤来改变,但不幸的是,如果在大型 DataFrame 中有很多组,速度会很慢:

def mn(x,ylt):
return x.loc[x['year'] < ylt, 'vals'].mean()

df = df2.groupby('month').apply(lambda x: mn(x,2007)).reset_index(name='vals')
print (df)

month vals
0 2 NaN
1 6 2.600000
2 7 2.750000
3 8 1.700000
4 9 6.633333
5 12 NaN

关于python - Pandas 使用 apply 函数过滤年份并获取月份的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com