我遇到了 pd.rolling() 方法的問題,即使該函數(shù)返回單個值,該方法也會返回多個輸出。我的目標(biāo)是:計算每個 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é)果并不接近。我該如何解決這個問題?
如何在 Pandas 中對多個列進(jìn)行滾動除法?
呼喚遠(yuǎn)方
2023-10-31 21:45:32