簡體   English   中英

在熊貓中向量化df.apply()操作

[英]Vectorizing a df.apply() Operation in Pandas

我有一個(493,20)熊貓數據框,想要為每行計算一個條件np.nanmean()。 條件是該行中的每個值都必須高於某個閾值,而又要低於另一個閾值。 這是我當前的設置:

filt_avg_data= np.nanmean(data_tsl.apply(func= lambda x: x[(x < maxval*np.median(x)) & (x > minval*np.median(x))], axis= 1),axis=1)

其中maxval:10,minval:0.1和data_tsl.shape =(493,20)。 這樣可以。

但是,我想向量化此操作-我不想使用df.apply()函數。 我試過了

data_tsl>np.median(data_tsl,axis=1)創建一個值的掩碼,可以在其上執行np.nanmean()操作,但是好像我無法使data_tsl每一行都data_tsl對應各自的中值。 這是彈出的錯誤: ValueError: operands could not be broadcast together with shapes (493,2) (493,)

我如何能夠向量化此操作? 與此類似的幾個問題實際上並沒有要求對問題進行矢量化處理-只是使.apply()操作起作用。

如果輸入數據中包含NaNs ,我想您想使用np.nanmedian從中位數計算中忽略NaNs 隨之,我們可以將組合的掩碼用於上限和下限閾值,以將無效的掩碼也設置為NaNs ,最后使用np.nanmean

a = data_tsl.values # use data_tsl.values.copy() to avoid editing input df
med = np.nanmedian(a,axis=1)
U = maxval*med
L = minval*med

a[(a >= U[:,None]) | (a <= L[:,None])] = np.nan
out = np.nanmean(a,axis=1)

暫無
暫無

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

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