社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python pandas:按其他列分组时创建累积平均值

Nicolas • 5 年前 • 1936 次点击  

想象一下这样一张桌子:

name | value 
-----|------
Jack | 0    
Jack | 1
Jack | 0.5
Jack | 1
Jill | 0
Jill | 2

对于每个名字,我希望得到累积平均值,如下所示:

name | value | cumAverage
-----|-------|-----------
Jack | 0     | 0
Jack | 1     | 0.5
Jack | 0.5   | 0.5
Jack | 1     | 0.625
Jill | 0     | 0
Jill | 2     | 1

因此,每当出现新名称时,累积平均值就应该“重新启动”。 name列被排序,因此每当出现一个新名称时,当前的累积平均值就结束了。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46679
 
1936 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Alexander
Reply   •   1 楼
Alexander    5 年前

即使名字没有按 transforming 这个 expanding 函数..

>>> df.assign(cumAverage=df.groupby('name', sort=False)['value'].transform(lambda x: x.expanding().mean()))
   name  value  cumAverage
0  Jack    0.0       0.000
1  Jack    1.0       0.500
2  Jack    0.5       0.500
3  Jack    1.0       0.625
4  Jill    0.0       0.000
5  Jill    2.0       1.000

# Unsorted dataframe.
df = pd.DataFrame({"name": ['Jack'] * 3 + ['Jill'] * 2 + ['Jack'], "value": [0, 1, .5, 0, 2, 1]})
>>> df.assign(cumAverage=df.groupby('name', sort=False)['value'].transform(lambda x: x.expanding().mean()))
   name  value  cumAverage
0  Jack    0.0       0.000
1  Jack    1.0       0.500
2  Jack    0.5       0.500
3  Jill    0.0       0.000
4  Jill    2.0       1.000
5  Jack    1.0       0.625
anky_91
Reply   •   2 楼
anky_91    5 年前

你需要 expanding().mean() 使用Groupby:

df.groupby('name')['value'].expanding().mean().reset_index(0)

对于未排序的df,以下命令将起作用:

df.groupby('name')['value'].expanding().mean().reset_index(0).sort_index()

   name  value
0  Jack  0.000
1  Jack  0.500
2  Jack  0.500
3  Jack  0.625
4  Jill  0.000
5  Jill  1.000