为了账号安全,请及时绑定邮箱和手机立即绑定

用Python / Pandas中的另一列计算行平均值

用Python / Pandas中的另一列计算行平均值

慕虎7371278 2021-04-07 13:09:46
我有一个数据框,如下所示:user | profit-------------Anna |    1.0Bell |    2.0Anna |    2.0Chad |    5.0Bell |    4.0Anna |    3.0我需要在用户级别上计算每一行的均值,也就是说,每次看到同一个用户时,我都会计算出到目前为止的利润均值。例如,安娜的第一个获利平均值为1.0,而第二个获利平均值为1.5,依此类推。所需的结果如下所示:user | profit | mean--------------------Anna |    1.0 |  1.0Bell |    2.0 |  2.0Anna |    2.0 |  1.5Chad |    5.0 |  5.0Bell |    4.0 |  3.0Anna |    3.0 |  2.0有任何建议在Python / Pandas中这样做吗?import pandas as pdrecord = pd.DataFrame({    "user": ("Anna", "Bell", "Anna", "Chad", "Bell", "Anna"),     "profit": (1.0, 2.0, 2.0, 5.0, 4.0, 3.0)})谢谢!
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

GroupBy.transform与rolling和一起使用mean:


df['mean'] = (df.groupby('user')['profit']

                .transform(lambda x: x.rolling(len(x), min_periods=1).mean()))

print (df)

   user  profit  mean

0  Anna     1.0   1.0

1  Bell     2.0   2.0

2  Anna     2.0   1.5

3  Chad     5.0   5.0

4  Bell     4.0   3.0

5  Anna     3.0   2.0


查看完整回答
反对 回复 2021-04-27
?
慕后森

TA贡献1802条经验 获得超5个赞

我认为到目前为止,我们可以使用cumsum()并除以计数。


g = df.groupby('user')['profit']

df['mean'] = g.cumsum() / (g.cumcount() + 1)

完整的例子


import pandas as pd

import numpy as np


df = pd.DataFrame({

    "user": ("Anna", "Bell", "Anna", "Chad", "Bell", "Anna"), 

    "profit": (1.0, 2.0, 2.0, 5.0, 4.0, 3.0)

})


g = df.groupby('user')['profit']

df['mean'] = g.cumsum() / (g.cumcount() + 1)


print(df)

返回值:


   user  profit  mean

0  Anna     1.0   1.0

1  Bell     2.0   2.0

2  Anna     2.0   1.5

3  Chad     5.0   5.0

4  Bell     4.0   3.0

5  Anna     3.0   2.0


查看完整回答
反对 回复 2021-04-27
  • 2 回答
  • 0 关注
  • 659 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信