【问题标题】:Insert Day of Week into Python Data Frame将星期几插入 Python 数据框中
【发布时间】:2020-08-02 16:37:17
【问题描述】:

我正在尝试计算一家餐厅在一周中的每一天的平均销售额。有七家餐厅,并非总是在同一天营业。

数据的结构如下:

Data Structure

我已成功使用以下代码将日期转换为星期几:

#converting days in table to days of the week
s = pd.date_range('2018-01-01', '2018-12-31', freq = 'D').to_series()

然后如何根据“日”系列附加数据框以放入此值?

【问题讨论】:

  • 预期输出是什么??
  • 如果您的日期列称为 day 并且您想提取星期几并将其分配给数据框,您可以尝试类似 df['dayofweek'] = df['day'].dt .dayofweek

标签: python pandas


【解决方案1】:

假设您有一个看起来有点像这样的数据框(数据框从示例图像修改为包含两个位置和一个多周的日期范围):

              location         day  number_of_orders
0          Bryant Park  2018-01-01               394
1          Bryant Park  2018-01-02               807
2          Bryant Park  2018-01-03               744
3          Bryant Park  2018-01-04               791
4          Bryant Park  2018-01-05               677
5          Bryant Park  2018-01-06               294
6          Bryant Park  2018-01-07               503
7          Bryant Park  2018-01-08               434
8          Bryant Park  2018-01-09               591
9          Bryant Park  2018-01-10               877
10  Rockefeller Center  2018-01-01               135
11  Rockefeller Center  2018-01-02               237

您可以先添加一个day_of_week 列:

df['day_of_week'] = pd.to_datetime(df['day']).dt.day_name()

所以数据框现在看起来像这样:

              location         day  number_of_orders day_of_week
0          Bryant Park  2018-01-01               394      Monday
1          Bryant Park  2018-01-02               807     Tuesday
2          Bryant Park  2018-01-03               744   Wednesday
3          Bryant Park  2018-01-04               791    Thursday
4          Bryant Park  2018-01-05               677      Friday
5          Bryant Park  2018-01-06               294    Saturday
6          Bryant Park  2018-01-07               503      Sunday
7          Bryant Park  2018-01-08               434      Monday
8          Bryant Park  2018-01-09               591     Tuesday
9          Bryant Park  2018-01-10               877   Wednesday
10  Rockefeller Center  2018-01-01               135      Monday
11  Rockefeller Center  2018-01-02               237     Tuesday

然后你可以使用这个新列来分组以达到你想要的结果:

res_df = df.groupby(['location', 'day_of_week']).mean().rename(columns={"number_of_orders": "avg_number_of_orders"})

输出数据帧:

location           day_of_week  avg_number_of_orders               
Bryant Park        Friday                      677.0
                   Monday                      414.0
                   Saturday                    294.0
                   Sunday                      503.0
                   Thursday                    791.0
                   Tuesday                     699.0
                   Wednesday                   810.5
Rockefeller Center Monday                      135.0
                   Tuesday                     237.0

请注意,您可能需要进行一些修改,以便它适用于您的实际数据,因为您实际上并没有指定是否所有位置都存储在一个数据帧中,等等。

【讨论】:

  • 已接受。看起来在 Pandas 中预先将日期转换为日期时间似乎让生活更轻松。
【解决方案2】:

使用您的示例,您可以通过以下方式直接转换它:

s.dt.strftime('%A')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2021-07-30
    • 2022-09-23
    • 2017-07-29
    • 2017-12-22
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多