编写一个循环代码来计算 77 次不同时间的平均值,使用另一列作为条件

Write a loop code to calculate average 77 different times, using another column as criteria

首先,这是我的第一个代码和问题,很抱歉这里的初学者水平和词汇量不足。

我想计算列“returns”中前 5 行的平均值并将其存储在数据框中,列“N”编号为 1,然后继续计算平均值 return 接下来的 5 行使用编号为 2 的相同列 N,依此类推(N 上升到 77)。请参阅下面的 table 作为示例。

实际数据超过 10.000 行,N 列从 1 到 77。

我确实准备了一个糟糕的代码(下面也是),但我有两个问题:

1 - 我无法将列 N 引用为循环。我必须输入 1 到 77(所以,77 次)才能得到样本 1 到 77

的所有平均值

2 - 我无法编写代码来存储输出,因为我也无法编写代码来从 N = 1 到 77

在下面的 table 中,存储在数据框中的所需结果(即:每个 N 的前 5 行的平均值)将是:0,1(对于 N = 1)和 0 ,15(对于 N = 2)

Sample table

N Return 1 0.23 1 0.08 1 0.02 1 0.16 1 0.01 1 0.01 1 -0.19 1 -0.14 1 -0.04 1 0.03 2 0.29 2 0.27 2 0.08 2 0.07 2 0.07 2 0.03 2 0.04 2 0.12 2 0.00 2 0.11

import pandas as pd
df = pd.read_csv(arq_csv)
ndf = df.loc[df["N"] == 1].head(5)
average = ndf["Return"].mean()
print(average)

试试这个代码:

import pandas as pd, random

# make dummy data
src = []
for i in range(77):
    for k in range(10):
        src.append([i + 1, random.randint(-10, 10)])
df = pd.DataFrame(src, columns=('N', 'Return'))
print(df)

# process data
df = df.groupby('N').head(5).groupby('N').mean().reset_index()
print(df)

输出

     N  Return
0    1    -1.4
1    2    -2.6
2    3     2.0
3    4    -0.6
4    5    -1.0
..  ..     ...
72  73    -2.0
73  74    -0.2
74  75    -2.0
75  76    -7.0
76  77     1.8

[77 rows x 2 columns]