python中列表数据汇总和平均值_对数据进行分类,计算每个类别的平均值和标准差...
我假設你的矩陣在一個列表列表中,并向你展示如何開始。(然而,正如我在一篇評論中提到的,如果你把矩陣放在一個numpy array或matrix中,它也會變得更加簡單和快速。)
如果您只是將該值作為一個大的多行字符串,則可以將其轉換為浮動列表,如下所示:m = [[float(col) for col in line.split()] for line in s.splitlines()]
現在,通過“根據第6列對這些數字進行分類”,聽起來您想要的是按該列的整數值對它們進行分組。在
Python附帶了一個^{}函數,它可以完成您在這里想要的大部分功能,但是您必須首先對數據進行排序。在
在Python中,排序和分組以及相關函數總是允許您傳遞鍵函數。您不必對第6列進行排序和分組,您可以使用第6列作為鍵對整行進行排序和分組。在
但實際上,您不想使用第6列的值作為鍵,而是要使用第6列的整數值。對于前者,您應該使用stdlib中的^{}函數,但是要做更復雜的事情,最好為其編寫一個函數:
^{pr2}$
(如果您重復這樣做,您可能需要編寫一個包裝器函數,該函數使用相同的鍵對其進行排序和分組,這樣就不必重復自己的操作,從而出錯。)
它提供的是一個內部有迭代器的迭代器,打印出來有點困難:[(k, list(g)) for k, g in groups]
…但你得到的是:[(68,
[[3917.0, 1.0, -0.662261, 25.148, 22.9354, 68.8076],
[3919.0, 1.0, -9.56836, -23.3265, -61.953, 68.8357]]),
(69,
[[3918.0, 1.0, 12.7649, 18.7451, 7.68473, 69.0063],
[3920.0, 1.0, 11.6292, 31.6525, -29.3697, 69.1372],
[3921.0, 2.0, 26.4837, -66.7897, 12.0257, 69.2282],
[3922.0, 1.0, -9.81652, 14.3788, 9.38343, 69.1217],
[3923.0, 2.0, 39.931, -88.1879, 109.498, 69.1604],
[3924.0, 1.0, 4.5502, 3.53887, -6.59604, 69.486],
[3925.0, 2.0, 13.6801, -24.6628, -5.7568, 69.9398]]),
(70, [[3926.0, 1.0, -10.5635, 7.05517, -8.82785, 70.2263]])]
因此,每個k是該類別分組的整數,每個g是該類別中的所有行(按排序順序)。在
(注意,因為groups是一個迭代器,如果print這個,groups現在將為空。)
這就解決了你的第一個問題,我想你的第二個問題(我不確定你到底想要什么)。在
對于第三種情況,首先需要遍歷組:for k, g in groups:
如果要在組中循環多次,則需要立即創建一個列表,然后循環該列表。在
對于每個組,您需要對多個列執行一些統計工作。最簡單的方法是使用一個模塊來處理所有的數學問題。PyPI上的^{}模塊是一個不錯的選擇,尤其是現在(稍作改動)它可能會最終進入即將發布的Python版本的標準庫中。在
但我只想說明一下,因為那是微不足道的。在
所以:def mean(sequence):
return sum(sequence) / len(sequence)
for k, g in groups:
rows = list(g)
print(k)
for column_index in 2, 3, 4:
column = [row[column_index] for row in rows]
print(mean(column))
可能有很多代碼不能滿足您的需要,但希望它足以讓您開始,并在遇到困難時提出更具體的問題。在
總結
以上是生活随笔為你收集整理的python中列表数据汇总和平均值_对数据进行分类,计算每个类别的平均值和标准差...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python fonttool_Pyth
- 下一篇: python多线程的作用_Python多