创建包含旧数据框中某些列的平均值的新数据框

Create new dataframe that contain the average value from some of the columns in the old dataframe

我有一个从 csv 文件中提取的数据框。我想迭代一个数据过程,其中只有一些列的数据是 n 行的平均值,而其余列是每次迭代的第一行。

例如,从csv中提取的数据由100行6列组成。 我有一个变量 n_AVE = 6,它告诉代码对每 6 行的数据进行平均。

rawDf = pd.read_csv(outputFilePath / 'Raw_data.csv', encoding='CP932')
OUT: 
       TIME      A       B        C        D        E
0     2021/3/4   148      0       142       0        1      [0]
1     2021/3/5   148      0       142       0        1
2     2021/3/6   150      0       148       0        1
3     2021/3/7   150      0       148       0        1
4     2021/3/8   151      0       148       0        1
5     2021/3/9   151      0       148       0        1
....
91    2021/4/30  195      5       180       0        1      [5]
92    2021/5/1   195      5       180       0        1
93    2021/5/2   195      5       180       0        1
94    2021/5/3   200      5       180       0        1
95    2021/5/4   200      0       200       0        1
96    2021/5/5   200      5       200       0        1      [6]
97    2021/5/6   200      5       200       1        1
98    2021/5/7   200      5       200       1        1
99    2021/5/8   205      5       210       1        1
100   2021/5/9   205      5       210       1        1

只取 [TIME, D, E] 列的第一行
[A、B、C] 列中每 n_AVE (6) 个数据的平均值。
我想创建一个看起来像这样的新数据框

OUT: 
       TIME         A       B         C        D        E
0     2021/3/4    149.66    0        146       0        1
....
5     2021/4/30   197.5   4.166     186.66     0        1
6     2021/5/5    168.33    5        170       0        1

代码是这样的:

for x in range(0,len(rawDf.index), n_AVE): 
    df = pd.DataFrame([rawDf.iloc[[x],0], rawDf.iloc[x:(x + n_AVE),1:3].mean(), rawDf.iloc[x,4:5]])

但是代码不起作用,因为显然当我使用 pandas.mean() 时,数据帧的格式变成了这样

df2 = rawDf.iloc[0:6,1:3].mean()
print(df2)

OUT: 
        index      0
    0     A      149.66    
    1     B       0.0
    2     C      146.0      
    [3 rows x 2 columns]

如何在不丢失旧格式的情况下使用 pandas.mean()?
还是我不应该使用 pandas.mean() 而只是创建自己的平均代码?

您可以通过分组器 np.arange(len(df)) // 6 对数据帧进行分组,分组器每六行对数据帧进行分组,然后使用所需的聚合函数聚合列以获得结果,可选地 reindex 沿 axis=1 重新排序列

d = {
    'A': 'mean', 'B': 'mean', 'C': 'mean', 
    'TIME': 'first', 'D': 'first', 'E': 'first'
}

df.groupby(np.arange(len(df)) // 6).agg(d).reindex(df.columns, axis=1)

使用列索引定义聚合函数:

d = {
    **dict.fromkeys(df.columns[[0, 4, 5]], 'first'),
    **dict.fromkeys(df.columns[[1, 2, 3]], 'mean' )
}

df.groupby(np.arange(len(df)) // 6).agg(d).reindex(df.columns, axis=1)

结果

        TIME           A         B           C  D  E
0   2021/3/4  149.666667  0.000000  146.000000  0  1
1  2021/4/30  197.500000  4.166667  186.666667  0  1
2   2021/5/6  202.500000  5.000000  205.000000  1  1