[英]Element wise average of arrays with different lengths from a dataframe
首先,我將解釋我希望發生的事情。 我有很多 arrays,但以 3 為例,長度不同。 我想通過比較每個元素的 arrays 來獲得平均值。
A = [0,10,20]
B = [10,40,60,80]
C = [50,70]
Expected outcome = [20,40,40,80]
我嘗試過的是使用 itertools 中的 zip_longest 並使用統計數據中的平均值 function。
from itertools import zip_longest
from statistics import mean
outcome = [mean(n) for n in zip_longest(a, b, c, fillvalue=0)]
然而,正如指定的那樣,填充值為 0,因此結果不是期望的結果。 由於使用平均值 function,我無法將填充值設置為無。 我是否必須使用不同的 function 來計算平均值? 或者另一種方法來獲得不同長度的元素明智的平均值 arrays。
編輯:抱歉,但忘記談論 arrays 的起源。因此 arrays 來自 pandas dataframe,其中列的每一行中的值是 x 長度的數組。
Edit2:添加更有意義的數據
使用 csv 文件的 pandas 創建 dataframe
Select 部分 dataframe 有 2 個條件
嘗試從滿足 2 個條件的第 3 列中獲取元素明智的平均值
df = pd.read_csv('data.csv')
sec1 = df[(df['Color'] == 'blue') & (df['Type'] == 21)
outcome = [np.nanmean(n) for n in zip_longest(sec1['time'], fillvalue=float("nan"))]
print(outcome)
其中 sec1['time'] 有 output 其中 arrays 是不同的長度
2168 [0, 10, 20, 29, 44, 47, 59, 71, 94, 198...
2169 [0, 0, 7, 12, 47, 84, 144, 163, 222...
...
一種方法是使用nan
作為填充值並在計算平均值時過濾掉(使用filterfalse
)值,如下所示:
from itertools import zip_longest, filterfalse
from statistics import mean
from math import isnan
a = [0, 10, 20]
b = [10, 40, 60, 80]
c = [50, 70]
outcome = [mean(filterfalse(isnan, n)) for n in zip_longest(a, b, c, fillvalue=float("nan"))]
print(outcome)
Output
[20, 40, 40, 80]
我建議你使用fmean
:
outcome = [fmean(filterfalse(isnan, n)) for n in zip_longest(a, b, c, fillvalue=float("nan"))]
print(outcome)
比mean
快,來自文檔:
這比 mean() function 運行得更快,它總是返回一個浮點數。 數據可以是序列或可迭代的。 如果輸入數據集為空,則引發 StatisticsError。
另一種選擇是使用 numpy nanmean
:
from itertools import zip_longest
import numpy as np
a = [0, 10, 20]
b = [10, 40, 60, 80]
c = [50, 70]
outcome = [np.nanmean(n) for n in zip_longest(a, b, c, fillvalue=float("nan"))]
print(outcome)
Output
[20.0, 40.0, 40.0, 80.0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.