2

我有以下数据框:

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”来显示一周的开始日期那笔交易发生在。

4

2 回答 2

3

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

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

在此处输入图像描述

于 2017-03-14T08:57:14.953 回答
3

你可以使用这些.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')
于 2017-03-14T08:52:04.440 回答