【问题标题】:How to groupby datetime column by starting day of week in pandas如何在熊猫中按星期几开始分组日期时间列
【发布时间】:2017-03-14 08:35:15
【问题描述】:

我有以下数据框:

transaction_date      gp    
2017-01-17         3477.92  
2017-01-18         5839.64  
2017-01-19         5082.19  
2017-01-20         5761.63  
2017-01-21         6705.89  
2017-01-22         9937.17  
2017-01-23         9432.93  
2017-01-24         7965.56  
2017-01-25         8517.26  
2017-01-26         8098.36  
2017-01-27         8947.25  
2017-01-28         8473.38  
2017-01-29         11660.13 
2017-01-30         10266.24 
2017-01-31         4350.21  
2017-02-01         10820.15 
2017-02-02         8554.61  
2017-02-03         10689.69 

我需要按一周的开始日期按transaction_date 列分组,例如,对于 2017 年 1 月 23 日至 2017 年 1 月 30 日之间的所有交易,它应该是 Jan-23 所以基本上我需要一个新列“first_day_week”来显示交易发生在一周的开始日期。

【问题讨论】:

    标签: python pandas dataframe python-datetime pandasql


    【解决方案1】:

    首先,您可以将日期时间序列对象转换为具有所需每周频率的周期对象。访问它的start_time 属性以获取以后每周的开始日期。由于我们是在对一个系列对象进行操作,因此请记住每次执行 datetime 相关操作时都提供.dt 访问器。

    df.assign(first_day_week=
              df['transaction_date'].dt.to_period('W').dt.start_time.dt.strftime("%b-%d"))
    

    【讨论】:

      【解决方案2】:

      您可以使用.dt 方法

      数据定义

      s = pd.Series(data={
      '2017-01-17':3477.92,  
      '2017-01-18':5839.64,  
      '2017-01-19':5082.19,  
      '2017-01-20':5761.63,  
      '2017-01-21':6705.89,  
      '2017-01-22':9937.17,  
      '2017-01-23':9432.93,  
      '2017-01-24':7965.56,  
      '2017-01-25':8517.26,  
      '2017-01-26':8098.36,  
      '2017-01-27':8947.25,}  )
      transaction_date = pd.Series(pd.to_datetime(s.index))
      

      开始一周

      start_of_week = transaction_date - pd.to_timedelta(transaction_date.dt.weekday, unit='D')
      start_of_week
      

      返回

      0    2017-01-16
      1    2017-01-16
      2    2017-01-16
      3    2017-01-16
      4    2017-01-16
      5    2017-01-16
      6    2017-01-23
      7    2017-01-23
      8    2017-01-23
      9    2017-01-23
      10   2017-01-23
      

      这可以分配给一周的开始列

      格式化

      如果格式很重要,可以添加

      start_of_week = start_of_week.dt.strftime('%b-%d')
      

      【讨论】:

        猜你喜欢
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 2015-03-15
        • 1970-01-01
        • 2011-04-01
        相关资源
        最近更新 更多