Python - Pandas Dataframe 获取 n 行的平均值
Python - Pandas Dataframe get avarage of n rows
只是为了在一开始就说明这一点。我说的是 rows
而不是 columns
:
https://i.stack.imgur.com/jikOF.png
我正在使用 pandas Dataframe
保存多个分贝值。我的工作是获取 n 行的 average
。我从 .wav file
中获取值,其中我 运行 和 stft function
将保存在 .wav file
中的数据保存到 pd.Dataframe.
因为我处理大文件我必须 aggregate
Dataframe
才能保存 DiskSpace
.
我已经有一个计算 n
聚合的算法,所以我只需要 运行 命令即可。
例如:
当聚合 n
为 4 时,Dataframe 应从以下位置转换:
这个:
2, 4, 6, 8, 10, 12, 14, 16 ...
3, 6, 9, 12, 15, 18, 21, 24 ...
...
进入这个:
{2, 4, 6, 8}, {10, 12, 14, 16} ... ,{3, 6, 9, 12}, {15, 18, 21, 24} ...
对此:
{5}, {13} ... {7.5}, {19.5} ...
最后是一个新的 Dataframe:
5, 13, ...
7.5, 19.5, ...
...
这是我正在使用的数据框:
0 1 2 ... 510 511 512
0 -50.148830 -50.731472 -58.459068 ... -80.000000 -80.000000 -80.000000
1 -49.234821 -49.215736 -57.735603 ... -80.000000 -80.000000 -80.000000
2 -53.309082 -53.790737 -61.091209 ... -80.000000 -80.000000 -80.000000
3 -50.511078 -51.120682 -59.740089 ... -80.000000 -80.000000 -80.000000
4 -52.077423 -51.985920 -59.107773 ... -80.000000 -80.000000 -80.000000
5 -47.280487 -47.177921 -56.507130 ... -80.000000 -80.000000 -80.000000
所以当我们看一下当 n
为三时第一行应该如何变化:
0 -50.148830 -50.731472 -58.459068 ... -80.000000 -80.000000 -80.000000
他们得到 "grouped"
:
array = [{-50.148830, -50.731472, -58.459068}, ..., {-80.000000, -80.000000, -80.000000}, ...];
然后avarage/mean()?
array
array = [{-53.1131}, ..., {-80.000000}, ...];
但不是只对一行执行此操作,而是对所有行执行此操作并将它们转换回 pd.Dataframe
。
0 ... 512
0 -53.1131 ... -80.000000
1 -52.0620 ... -80.000000
2 -56.0636 ... -80.000000
3 -53.7906 ... -80.000000
4 -54.3904 ... -80.000000
5 -50.3219 ... -80.000000
我尝试了 groupby 函数,但我总是得到一个值错误:
n = 3
pd.Dataframe = data
grouped = data.groupby(np.arange(len(data)) // n, axis=1).mean()
输出:
ValueError: Grouper and axis must be same length
我无法在互联网上找到解决方案,因此非常感谢您的帮助:D
'The grouper and axis should be of same length':在你的代码中,这里的grouper是len(data)(行数),axis是1,其实是不一样的。
所以它应该是
data.groupby(np.arange(len(data)) // n, axis=0).mean()
或
data.groupby(np.arange(len(data.columns)) // n, axis=1).mean()
在你的情况下,你似乎想按列分组,所以后一个版本应该可以工作
只是为了在一开始就说明这一点。我说的是 rows
而不是 columns
:
https://i.stack.imgur.com/jikOF.png
我正在使用 pandas Dataframe
保存多个分贝值。我的工作是获取 n 行的 average
。我从 .wav file
中获取值,其中我 运行 和 stft function
将保存在 .wav file
中的数据保存到 pd.Dataframe.
因为我处理大文件我必须 aggregate
Dataframe
才能保存 DiskSpace
.
我已经有一个计算 n
聚合的算法,所以我只需要 运行 命令即可。
例如:
当聚合 n
为 4 时,Dataframe 应从以下位置转换:
这个:
2, 4, 6, 8, 10, 12, 14, 16 ...
3, 6, 9, 12, 15, 18, 21, 24 ...
...
进入这个:
{2, 4, 6, 8}, {10, 12, 14, 16} ... ,{3, 6, 9, 12}, {15, 18, 21, 24} ...
对此:
{5}, {13} ... {7.5}, {19.5} ...
最后是一个新的 Dataframe:
5, 13, ...
7.5, 19.5, ...
...
这是我正在使用的数据框:
0 1 2 ... 510 511 512
0 -50.148830 -50.731472 -58.459068 ... -80.000000 -80.000000 -80.000000
1 -49.234821 -49.215736 -57.735603 ... -80.000000 -80.000000 -80.000000
2 -53.309082 -53.790737 -61.091209 ... -80.000000 -80.000000 -80.000000
3 -50.511078 -51.120682 -59.740089 ... -80.000000 -80.000000 -80.000000
4 -52.077423 -51.985920 -59.107773 ... -80.000000 -80.000000 -80.000000
5 -47.280487 -47.177921 -56.507130 ... -80.000000 -80.000000 -80.000000
所以当我们看一下当 n
为三时第一行应该如何变化:
0 -50.148830 -50.731472 -58.459068 ... -80.000000 -80.000000 -80.000000
他们得到 "grouped"
:
array = [{-50.148830, -50.731472, -58.459068}, ..., {-80.000000, -80.000000, -80.000000}, ...];
然后avarage/mean()?
array
array = [{-53.1131}, ..., {-80.000000}, ...];
但不是只对一行执行此操作,而是对所有行执行此操作并将它们转换回 pd.Dataframe
。
0 ... 512
0 -53.1131 ... -80.000000
1 -52.0620 ... -80.000000
2 -56.0636 ... -80.000000
3 -53.7906 ... -80.000000
4 -54.3904 ... -80.000000
5 -50.3219 ... -80.000000
我尝试了 groupby 函数,但我总是得到一个值错误:
n = 3
pd.Dataframe = data
grouped = data.groupby(np.arange(len(data)) // n, axis=1).mean()
输出:
ValueError: Grouper and axis must be same length
我无法在互联网上找到解决方案,因此非常感谢您的帮助:D
'The grouper and axis should be of same length':在你的代码中,这里的grouper是len(data)(行数),axis是1,其实是不一样的。 所以它应该是
data.groupby(np.arange(len(data)) // n, axis=0).mean()
或
data.groupby(np.arange(len(data.columns)) // n, axis=1).mean()
在你的情况下,你似乎想按列分组,所以后一个版本应该可以工作