簡體   English   中英

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 我從運行stft function.wav file中獲取值,以將保存在.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, ...
...

這是我正在使用的 Dataframe:

         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為 3 時第一行應該如何變化時:

 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 function 但我總是得到一個值錯誤:

n = 3
pd.Dataframe = data

grouped = data.groupby(np.arange(len(data)) // n, axis=1).mean()

output:

ValueError: Grouper and axis must be same length

我在互聯網上找不到解決方案,因此不勝感激:D

'分組器和軸應該具有相同的長度':在您的代碼中,這里的分組器是 len(data) (行數),軸是 1,它們實際上是不同的。 所以它應該是

data.groupby(np.arange(len(data)) // n, axis=0).mean()

或者

data.groupby(np.arange(len(data.columns)) // n, axis=1).mean()

在您的情況下,您似乎想按列分組,所以后一個版本應該可以工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM