Я потратил некоторое время, пытаясь понять, как вы подходите к проблеме, и есть ли другой способ взглянуть на нее.
Я ни в коем случае не профессионал, поэтому возьмите все это с крошкой соли:
- Я не думаю, что есть более "питон" c "способ сделать свой код. Несмотря на обширность, я могу показать вам, как мой мозг подходил к вашей проблеме, как я ее понял:
import numpy as np
import pandas as pd
#Generating a Random Sample
np.random.seed(30)
values=np.random.randint(0,400,14)
day= pd.date_range(start='25/02/2020',periods=14)
#Creating an example DataFrame
df_input={'date':day,"values":values}
df_test=pd.DataFrame(df_input)
# group and use mean
weekdays = (df_test[df_test.date.dt.weekday.isin([0,1,2,3,4])]
.groupby(df_test.date.dt.week)
.mean())
# group and use mean
weekends = (df_test[df_test.date.dt.weekday.isin([5,6])]
.groupby(df_test.date.dt.week)
.mean())
# store in dict
d = {'weekdays': weekdays, 'weekends': weekends}
# concat and drop extra level('values')
both = pd.concat(d, axis=1).droplevel(1, axis=1)
# create new column with mean ratio differences
both['weekends_ratio'] = both['weekends'].div(both['weekends']+both['weekdays'])
print(both)
weekdays weekends weekend_ratio
date
9 280 280.0 0.500000
10 247 170.0 0.407674
11 18 NaN NaN
Я не знаю, поможет ли это, но, возможно, используйте
.mean()
(как вы видите в моем коде) вместо
.sum()
, чтобы найти разницу в средних продажах.