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

时间:2018-07-09 11:15:45

标签: 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)
})

谢谢!

2 个答案:

答案 0 :(得分:2)

GroupBy.transformrollingmean一起使用:

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

答案 1 :(得分:1)

我认为到目前为止,我们可以使用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