簡體   English   中英

arrays 的元素明智平均值與 dataframe 不同的長度

[英]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.

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