【问题标题】:Sort days of week in the right order in Python在 Python 中以正确的顺序对星期几进行排序
【发布时间】:2017-11-27 10:31:12
【问题描述】:

我正在从 python 中的 csv 文件导入一些数据并创建一个名为 frame5 的数据框。

我有每天的日期数据。到目前为止,我已经使用以下方法将日期转换为星期几。

    frame5['day_of_week']=frame5['date'].dt.dayofweek
    days = {0:'Mon',1:'Tues',2:'Weds',3:'Thurs',4:'Fri',5:'Sat',6:'Sun'}
    frame5['day_of_week'] = frame5['day_of_week'].apply(lambda x: days[x])

然后,为了计算我使用的每日平均值:

grouped_day_of_week=frame5.groupby('day_of_week') 
day_of_week_statistics=grouped_day_of_week['reward'].agg([np.mean,np.size,np.sum])

那我想用日常手段做一个情节。

但是,在数据框 day_of_week_statistics 中,日期似乎按字母顺序排序(每一行是为一周中的每一天计算的统计数据)。

如何更改日期的顺序,以便它们以正确的顺序显示为“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”?

【问题讨论】:

  • 我有一种预感,您还有其他名为 frame1frame4 的数据框?不要那样做。制作一个列表frame 以存储帧。
  • OP,我想出了一个比我之前的答案更有效的版本。看看它是否适合你。谢谢!

标签: python pandas


【解决方案1】:

按星期几预先排序。此外,您可以使用 map/replace,因为 apply 很慢。

i = frame5['date'].dt.dayofweek.values.argsort()
frame5 = frame5.iloc[i]

frame5['day_of_week'] = frame5['day_of_week'].map(days)  # .replace(days)
When calling groupby, call it with sort=False, since groupby usually returns groups in sorted order of index. We do this since we don't want to disrupt the sorted order from earlier.

grouped_day_of_week = frame5.groupby('day_of_week', sort=False) 

改进的解决方案由 Jon Clements 提供。 这利用了以前的概念,但效率更高。

dt.dayofweek 上调用groupby,然后在结果索引上调用map -

g = frame5.groupby(frame5['date'].dt.dayofweek)['Reward'].agg(['mean', 'size', 'sum'])
g.index = g.index.map(days.get)

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2011-10-31
    • 2015-09-21
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多