每个用户的数据帧的移动平均值。蟒蛇,熊猫

埃斯特克

我想向数据框中添加一列,其中每个唯一用户的移动平均值的值都来自另一列(这里是棘手的部分)。

首先想到的是获取所有唯一用户的列表并遍历所有用户,获取用户列等于该用户的数据帧子集:

import pandas as pd
df = pd.DataFrame()
df['user'] = [1,2,3,2,2,1,1,3,3,3,3,3,3,2,1,2,1,2,1,1]
df['value'] = [3,1,5,7,2,2,2,9,8,7,6,5,4,3,2,2,2,1,2,3]

unique_users = df['user'].unique()
df['rolled_value'] = 0

for user in unique_users:
    temp_df = df[df['user'] == user]
    temp_df['rolled_value'] = temp_df['value'].rolling(2).mean()

它不起作用,因为它不会让我更改列的值,因为它是来自 df 的切片的副本,但是您明白了。

这会非常慢,我有 1000 万行,而且需要很长时间。

我对 python 很陌生,无法想出一个快速的等价物。有什么办法可以在这里使用 lambda 函数吗?

任何帮助,将不胜感激。

谢谢!

克拉里尼亚

如果我正确理解您想要做什么,以下应该有效:

rolled_values = df.groupby('user')['value'].rolling(2).mean().reset_index()

这将返回一个按用户分组的 DataFrame,“level_1”列包含旧索引,“value”列现在包含滚动平均值。

   user  level_1  value
0     1        0    NaN
1     1        5    2.5
2     1        6    2.0
3     1       14    2.0
4     1       16    2.0
5     1       18    2.0
6     1       19    2.5
7     2        1    NaN
8     2        3    4.0
9     2        4    4.5
(...)

现在您只需将此列添加到旧的 DataFrame 中:

df['rolled_values'] = rolled_values.set_index('level_1')['value']

   user  value  rolled_values
0     1      3          NaN
1     2      1          NaN
2     3      5          NaN
3     2      7          4.0
4     2      2          4.5
(...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫数据框:获取组中每个子组的第一行的平均值

熊猫数据帧中的groupby加权平均值和总和

数据帧中每周/每月的每小时平均值(移动平均值)

熊猫-移动平均值按多列分组

使用最新的熊猫API计算指数移动平均值

从熊猫数据框计算平均值

熊猫数据框平均值

添加新行以计算现有熊猫数据帧的总和和平均值

熊猫数据框平均值与相同CSV的Excel平均值不同吗?

从熊猫数据帧中的行子集计算平均值:groupby或for循环?

如何在数据帧的每个子组中找到移动平均值

通过分组计算熊猫数据框架上的累积移动平均值

数据帧变量之间的R移动平均值

对每种处理的周期1-3和4-6求平均值,对每个变量求ID的平均值,并在新的数据帧中获取数据

熊猫-无法计算移动平均值

用数据绘制移动平均值

计算每个用户输入的平均值

如何从三个不同的数据帧中取每个单元的平均值?

具有重复索引的数据帧上的groupby平均值或groupby平均值

使用熊猫计算给定频率的数据帧的平均值

数据帧具有多个索引时的熊猫滚动平均值计算

从我的数据帧计算加权平均值

R:如何计算数据帧中每个第 n 个间隔的平均值?

如何计算pandas数据帧中每个行子集的移动平均值?

如何计算每个csv数据帧列表的平均值

熊猫在数据帧列表中获得每个(行,列)的平均值

使用(对于每个单元格)其他数据帧的平均值创建数据帧

数据帧段的平均值

熊猫与第二个数据帧的平均值合并