【问题标题】:How can I create a week column in a datetime format without the hours/minutes/seconds?如何在没有小时/分钟/秒的情况下以日期时间格式创建周列?
【发布时间】:2021-08-24 22:09:18
【问题描述】:

我遵循本教程是为了在 pandas 中创建一周专栏:group by week in pandas。如果您有一个没有小时、分钟和秒的日期,答案就可以正常工作。但这对我不起作用。其实我什至不需要答案的总结部分,只需要创建周列,这看起来很简单,但我找不到解决方案。

我有一个包含产品 ID、价格和销售时间的数据集,就像这样:

sold_date            id         price
2020-01-01 20:00:01  A1         100
2020-01-02 10:03:01  B1         110
2020-01-02 11:10:01  B1         130
2020-02-03 22:20:01  A1         110
2020-02-04 23:05:01  A1         140
2020-02-04 21:00:05  B1         190
.
.
.

我只想添加一个包含创建周的日期时间列。我正在努力解决这个问题:

week_sold            id         price
2019-12-30           A1         100
2019-12-30           B1         110
2019-12-30           B1         130
2020-02-02           A1         110
2020-02-02           A1         140
2020-02-02           B1         190
.
.
.

我也可以使用 2019-12-30 00:00:000 之类的东西。我所关注的链接的解决方案的问题是它没有考虑小时数,因此当您仅通过减去 7 天来创建一周列时,您会为每一行获得不同的值。您将获得前两行 2019-12-30 20:00:012019-12-30 10:03:01

提前致谢。抱歉,我无法共享正在处理的表格。

【问题讨论】:

  • 2020 年 2 月 3 日是星期一,而不是 2 月 2 日。

标签: python pandas group-by


【解决方案1】:

你可以使用to_period,然后抓取那个时期的start_time

df['week_sold'] = df['sold_date'].dt.to_period('W').dt.start_time

            sold_date  id  price  week_sold
0 2020-01-01 20:00:01  A1    100 2019-12-30
1 2020-01-02 10:03:01  B1    110 2019-12-30
2 2020-01-02 11:10:01  B1    130 2019-12-30
3 2020-02-03 22:20:01  A1    110 2020-02-03
4 2020-02-04 23:05:01  A1    140 2020-02-03
5 2020-02-04 21:00:05  B1    190 2020-02-03

【讨论】:

    【解决方案2】:

    根据您的 sold_date 列的日期类型,它可能就像转换为 pd.datetime 一样简单,如下所示:

    df["sold_date"] = pd.to_datetime(df["sold_date"])

    一旦这样,您可以通过以下方式访问日期:

    df["sold_date"] = df["sold_date"].dt.date

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多