首页 > 解决方案 > 数据框中每日数据与工作日和周末的偏差

问题描述

我有一些每日数据,我希望计算每个数据点与其月平均值的偏差,但我想区分工作日和周末之间的月平均值。

一些样本数据:

import pandas as pd
import numpy as np
from datetime import datetime, timedelta
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(100), freq='D')
np.random.seed(seed=1111)
data = 66*np.random.randint(1, high=100, size=len(days))/100
df = pd.DataFrame({'Date': days, 'vals': data})
df = df.set_index('Date')
print(df)

现在,如果我平等对待所有日子,我可以这样做:

df['valdifftoavg']= df['vals'].sub(df.resample("M")['vals'].transform('mean'))

但我想区分,所以如果每日数据是工作日减去该月的工作日平均值,如果是周末,则减去该月的周末平均值。

标签: pythonpandas

解决方案


我会做:

is_weekend = df.index.weekday >= 5

# groupby month and is_weekend
means = (df.groupby([df.index.to_period('M'),is_weekend])
           ['vals'].transform('mean')
        )

df['deviation'] = df['vals'] - means

推荐阅读