我有一個帶有一列的 pd.DataFrame df,比如:
A = [1,2,3,4,5,6,7,8,2,4]
df = pd.DataFrame(A,columns = ['A'])
對于每一行,我想取前 2 個值、當前值和下一個 2 值(視窗 = 5)并獲取總和并將其存盤在新列中。渴望輸出,
A A_sum
1 6
2 10
3 15
4 20
5 25
6 30
7 28
8 27
2 21
4 14
我努力了,
df['A_sum'] = df['A'].rolling(2).sum()- 嘗試過換檔,但都在前進或后退,我正在尋找兩者的結合。
uj5u.com熱心網友回復:
使用滾動5,添加引數center=True和min_periods=1到Series.rolling:
df['A_sum'] = df['A'].rolling(5, center=True, min_periods=1).sum()
print (df)
A A_sum
0 1 6.0
1 2 10.0
2 3 15.0
3 4 20.0
4 5 25.0
5 6 30.0
6 7 28.0
7 8 27.0
8 2 21.0
9 4 14.0
uj5u.com熱心網友回復:
如果您被允許使用numpy,那么您可能會使用numpy.convolve來獲得所需的輸出
import numpy as np
import pandas as pd
A = [1,2,3,4,5,6,7,8,2,4]
B = np.convolve(A,[1,1,1,1,1], 'same')
df = pd.DataFrame({"A":A,"A_sum":B})
print(df)
輸出
A A_sum
0 1 6
1 2 10
2 3 15
3 4 20
4 5 25
5 6 30
6 7 28
7 8 27
8 2 21
9 4 14
uj5u.com熱心網友回復:
您可以使用shift它(如果不優雅,則直截了當):
df["A_sum"] = df.A df.A.shift(-2).fillna(0) df.A.shift(-1).fillna(0) df.A.shift(1).fillna(0)
輸出:
A A_sum
0 1 6.0
1 2 10.0
2 3 14.0
3 4 18.0
4 5 22.0
5 6 26.0
6 7 23.0
7 8 21.0
8 2 14.0
9 4 6.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454562.html
標籤:Python python-3.x 熊猫
上一篇:距離矩陣半正弦
下一篇:如何從復雜的json制作資料框?
