创建包含旧数据框中某些列的平均值的新数据框
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
我有一个从 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