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

我有一个数据框,如下所示:


user | profit

-------------

Anna |    1.0

Bell |    2.0

Anna |    2.0

Chad |    5.0

Bell |    4.0

Anna |    3.0

我需要在用户级别上计算每一行的均值,也就是说,每次看到同一个用户时,我都会计算出到目前为止的利润均值。


例如,安娜的第一个获利平均值为1.0,而第二个获利平均值为1.5,依此类推。


所需的结果如下所示:


user | profit | mean

--------------------

Anna |    1.0 |  1.0

Bell |    2.0 |  2.0

Anna |    2.0 |  1.5

Chad |    5.0 |  5.0

Bell |    4.0 |  3.0

Anna |    3.0 |  2.0

有任何建议在Python / Pandas中这样做吗?


import pandas as pd


record = pd.DataFrame({

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

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

})

谢谢!


慕虎7371278
浏览 660回答 2
2回答

jeck猫

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  mean0  Anna     1.0   1.01  Bell     2.0   2.02  Anna     2.0   1.53  Chad     5.0   5.04  Bell     4.0   3.05  Anna     3.0   2.0

慕后森

我认为到目前为止,我们可以使用cumsum()并除以计数。g = df.groupby('user')['profit']df['mean'] = g.cumsum() / (g.cumcount() + 1)完整的例子import pandas as pdimport numpy as npdf = 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  mean0  Anna     1.0   1.01  Bell     2.0   2.02  Anna     2.0   1.53  Chad     5.0   5.04  Bell     4.0   3.05  Anna     3.0   2.0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python