社区所有版块导航
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中每个用户的平均值

AAM • 1 年前 • 777 次点击  

我有一个包含以下列的数据框架(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
 
777 次点击  
文章 [ 2 ]  |  最新文章 1 年前