第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Pandas 中對多個列進行滾動除法?

如何在 Pandas 中對多個列進行滾動除法?

呼喚遠方 2023-10-31 21:45:32
我遇到了 pd.rolling() 方法的問題,即使該函數(shù)返回單個值,該方法也會返回多個輸出。我的目標是:計算每個 df 中包含 3 列的兩個 DataFrame 之間的絕對百分比差異。將所有值相加我可以使用 pd.iterrows() 來做到這一點。但處理較大的數(shù)據(jù)集會使此方法無效。這是我正在使用的測試數(shù)據(jù):#import librariesimport pandas as pdimport numpy as np #create two dataframesvalues = {'column1': [7,2,3,1,3,2,5,3,2,4,6,8,1,3,7,3,7,2,6,3,8],        'column2': [1,5,2,4,1,5,5,3,1,5,3,5,8,1,6,4,2,3,9,1,4],        "column3" : [3,6,3,9,7,1,2,3,7,5,4,1,4,2,9,6,5,1,4,1,3]        }df1 = pd.DataFrame(values)df2 = pd.DataFrame([[2,3,4],[3,4,1],[3,6,1]])print(df1)print(df2)    column1  column2  column30         7        1        31         2        5        62         3        2        33         1        4        94         3        1        75         2        5        16         5        5        27         3        3        38         2        1        79         4        5        510        6        3        411        8        5        112        1        8        413        3        1        214        7        6        915        3        4        616        7        2        517        2        3        118        6        9        419        3        1        120        8        4        3   0  1  20  2  3  41  3  4  12  3  6  1此方法通過使用 pd.iterrows() 生成我想要的輸出RunningSum = []for index, rows in df1.iterrows():    if index > 3:        Div = abs((((df2 / df1.iloc[index-3+1:index+1].reset_index(drop="True").values)-1)*100))        Average = Div.sum(axis=0)        SumOfAverages = np.sum(Average)        RunningSum.append(SumOfAverages)最后,下面是我嘗試使用 pd.rolling() ,這樣我就不需要循環(huán)每一行。def SumOfAverageFunction(vals):    Div = abs((((df2.values / vals.reset_index(drop="True").values)-1)*100))    Average = Div.sum()    SumOfAverages = np.sum(Average)    return SumOfAveragesRunningSums = df1.rolling(window=3,axis=0).apply(SumOfAverageFunction)這是我的問題,因為從上面打印 RunningSums 會輸出幾個值,并且與我使用 iterrows 方法得到的結(jié)果并不接近。我該如何解決這個問題?
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經(jīng)驗 獲得超11個贊

這就是滾動的行為方式,它將圍繞所有列打開窗口,我不知道有什么辦法可以解決它。一種解決方案是將滾動應用于單個列,并使用這些窗口中的索引對函數(shù)內(nèi)的數(shù)據(jù)幀進行切片。還是很貴,但可能沒有你現(xiàn)在做的那么糟糕。


另外,第一個方法的輸出看起來是錯誤的。實際上,您開始計算的時間已經(jīng)晚了幾行。


import numpy as np


def SumOfAverageFunction(vals):

    return (abs(np.divide(df2.values, df1.loc[vals.index].values)-1)*100).sum()


vals = df1.column1.rolling(3)

vals.apply(SumOfAverageFunction, raw=False)


查看完整回答
反對 回復 2023-10-31
  • 1 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號