python - 使用相同的字符串过滤前 3 行并在 python 中计算平均值

标签 python python-3.x pandas numpy dataframe

我有一个数据框,其中事件和持续时间作为列。

duration = np.random.randint(4, size = 30)
activities = ['work', 'home', 'work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home', 'work', 'home']
activity_df = pd.DataFrame({'activities':activities, 'duration':duration})

我想遍历行并计算持续时间的平均值 最后 3 个作品并将其作为新功能。

你们有人知道怎么做吗?

我的输出应该是第三列,其中每行计算前 3 个相同的事件

提前谢谢您!

最佳答案

使用boolean indexing ,按 tail 过滤最后 3 个并获取平均值:

a = activity_df.loc[activity_df['activities']=='work', 'duration'].tail(3).mean()

更通用的解决方案是通过GroupBy.tail创建事件的所有最后3行的平均值。 :

s = activity_df.set_index('activities').groupby('activities').tail(3).mean(level=0)
print (s)

编辑:

np.random.seed(1256)

duration = np.random.randint(4, size = 30)
activities = ['work', 'home', 'work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home','work', 'home', 'work', 'home']

满足您的新输出需求 groupbyrolling和聚合平均值:

activity_df = pd.DataFrame({'activities':activities, 'duration':duration})

activity_df['roll'] = (activity_df.groupby('activities')['duration']
                                  .rolling(3)
                                  .mean()
                                  .reset_index(level=0, drop=True))
print (activity_df)
   activities  duration      roll
0        work         1       NaN
1        home         2       NaN
2        work         1       NaN
3        home         3       NaN
4        work         0  0.666667
5        home         1  2.000000
6        work         3  1.333333
7        home         0  1.333333
8        work         1  1.333333
9        home         3  1.333333
10       work         1  1.666667
11       home         1  1.333333
12       work         3  1.666667
13       home         2  2.000000
14       work         2  2.000000
15       home         3  2.000000
16       work         0  1.666667
17       home         2  2.333333
18       work         3  1.666667
19       home         0  1.666667
20       work         3  2.000000
21       home         0  0.666667
22       work         1  2.333333
23       home         3  1.000000
24       work         1  1.666667
25       home         2  1.666667
26       work         1  1.000000
27       home         2  2.333333
28       work         2  1.333333
29       home         1  1.666667

关于python - 使用相同的字符串过滤前 3 行并在 python 中计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50838369/

相关文章:

python - 不使用 numpy 数组转置 h5py 数据集

Python:矩形参数无效

python-3.x - 如何将循环中的字符串附加到单个输出行?

python - token 与 Python secret 库发生冲突的可能性有多大?

python-3.x - 如何修复构建神经网络时出现的以下错误?

python - 在 pandas 数据框上使用 apply 时传递值的形状错误

python - Django:如何获取 url 路径?

python - 在函数内部定义函数与在函数外部定义函数之间的区别

Python Pandas - 移动行

python - Pandas 用以前的非零值替换零