1 回答

TA貢獻1798條經(jīng)驗 獲得超3個贊
我認為這只是幾天的滾動:
def get_roll(x):
s = pd.Series(x['amount'].values,
index=pd.to_datetime('1900-01-01') + pd.to_timedelta(x['day'], unit='D')
)
return pd.Series(s.rolling('2D').sum().values, index=x.index)
df['amount2days'] = (df.groupby('customer').apply(get_roll)
.reset_index(level=0, drop=True)
)
輸出:
day customer amount amount2days
1 1 cust1 500 500.0
2 1 cust2 100 100.0
3 1 cust1 50 550.0
4 2 cust1 100 650.0
5 2 cust2 250 350.0
6 3 cust1 20 120.0
選項 2:由于您只想計算兩天的累計金額,因此今天的金額僅加上前一天的金額。所以我們可以利用shift:
df['amount2days'] = df.groupby(['customer','day'])['amount'].cumsum()
# shift the last item of the previous day and add
df['amount2days'] += (df.drop_duplicates(['day','customer'],keep='last')
.groupby(['customer'])['amount2days'].shift()
.reindex(df.index)
.ffill()
.fillna(0)
)
添加回答
舉報