Py学习  »  Python

计算python中每个用户的平均值

AAM • 9 月前 • 118 次点击  

我有一个包含以下列的数据框架(df):用户、值和时间。

df = pd.DataFrame({'user': ['user_1', 'user_2', 'user_3','user_1', 'user_2',  'user_3',
                            'user_1', 'user_2',  'user_3'],
                   'values': [[1, 0, 2, 0], [1, 8, 0, 2],[6, 2, 0, 0],
                              [5, 0, 2, 2], [3, 8, 0, 0],[6, 0, 0, 2],
                             [3, 1, 1, 3], [2, 4, 1, 0],[4, 2, 0, 1]],
                   'time': [1, 1, 1, 2, 2, 2, 3, 3, 3]})

输出:

    user       values     time
0   user_1  [1, 0, 2, 0]    1
1   user_2  [1, 8, 0, 2]    1
2   user_3  [6, 2, 0, 0]    1
3   user_1  [5, 0, 2, 2]    2
4   user_2  [3, 8, 0, 0]    2
5   user_3  [6, 0, 0, 2]    2
6   user_1  [3, 1, 1, 3]    3
7   user_2  [2, 4, 1, 0]    3
8   user_3  [4, 2, 0, 1]    3

我想计算每个用户相对于之前时间值的平均值。

例如:

对于用户_1:-

对于时间=1,计算时间1中user_1的值的平均值=[1,0,2,0]

对于时间=2,计算时间1和2中user_1的值的平均值
=[1+5/2,0+0/2,2+2/2,0+2/2]=[3,0,2,1]

对于时间=3,计算时间2中user_1的值(为[3,0,2,1])和3(为[3,1,1,3])=[3+3/2,0+1/2,2+1/2,1+3/2]=[3,0.5,1.5,2]的平均值

等等。

因此,user_1的预期结果是:

in time 1: [1, 0, 2, 0]
in time 2: [3, 0, 2, 1]
in time 3: [3, 0.5, 1.5, 2]

我尝试了以下代码

result = (df.groupby('user')['values']
         .agg(lambda x: np.vstack(x).mean(0).round(2))
       )

print(result)

后果

user
user_1    [3.0, 0.33, 1.67, 1.67]
user_2    [2.0, 6.67, 0.33, 0.67]
user_3     [5.33, 1.33, 0.0, 1.0]

但它返回每个用户在所有时间的平均值!我想计算每个用户关于当前t和先前t-1的平均值,就像在示例中一样。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/158385
 
118 次点击  
文章 [ 2 ]  |  最新文章 9 月前