【问题标题】:Python - Pandas Dataframe get avarage of n rowsPython - Pandas Dataframe 获得 n 行的平均值
【发布时间】:2020-11-14 03:36:38
【问题描述】:

只是为了在开始时说清楚。我说的是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}, ...];

然后是平均/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

【问题讨论】:

    标签: python pandas numpy dataframe aggregation


    【解决方案1】:

    'grouper 和axis 应该是相同的长度':在你的代码中,这里的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()
    

    在您的情况下,您似乎想按列分组,所以后一个版本应该可以工作

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 2016-01-08
      • 2023-03-10
      • 2020-07-07
      相关资源
      最近更新 更多