Pandas group by weekday (M/T/W/T/F/S/S)

与世无争的帅哥 提交于 2019-12-05 13:17:23

I believe you need first parameter parse_dates in read_csv for parse column to datetime and then groupby by weekday_name and aggregate:

df_data = pd.read_csv('data.csv', parse_dates=['arrival_date'])

week_df = df_data.groupby(df_data['arrival_date'].dt.weekday_name).mean()
print (week_df)
                price_1      price_2    price_3    price_4
arrival_date                                              
Friday        71.952235  1130.106565  64.900476  25.779593
Monday        71.026544  1391.363442  67.362277  25.976418
Saturday      83.149556  1364.312304  76.538815  27.371489
Sunday        57.553097  1223.977557  51.952801  21.552876
Thursday      66.831764  1364.982781  63.940393  23.887128
Tuesday       79.006604  1241.603185  75.360606  28.250994
Wednesday     76.021324  1276.650570  72.485089  23.611288

For numeric index use weekday:

week_df = df_data.groupby(df_data['arrival_date'].dt.weekday).mean()
print (week_df)
                price_1      price_2    price_3    price_4
arrival_date                                              
0             71.026544  1391.363442  67.362277  25.976418
1             79.006604  1241.603185  75.360606  28.250994
2             76.021324  1276.650570  72.485089  23.611288
3             66.831764  1364.982781  63.940393  23.887128
4             71.952235  1130.106565  64.900476  25.779593
5             83.149556  1364.312304  76.538815  27.371489
6             57.553097  1223.977557  51.952801  21.552876

EDIT:

For correct ordering add reindex:

days = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday', 'Sunday']
week_df = df_data.groupby(df_data['arrival_date'].dt.weekday_name).mean().reindex(days)
print (week_df)
                price_1      price_2    price_3    price_4
arrival_date                                              
Monday        71.026544  1391.363442  67.362277  25.976418
Tuesday       79.006604  1241.603185  75.360606  28.250994
Wednesday     76.021324  1276.650570  72.485089  23.611288
Thursday      66.831764  1364.982781  63.940393  23.887128
Friday        71.952235  1130.106565  64.900476  25.779593
Saturday      83.149556  1364.312304  76.538815  27.371489
Sunday        57.553097  1223.977557  51.952801  21.552876
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!