python pandas 将多年的 yyyy-mm-dd 分配为累计周数

标签 python python-3.x pandas week-number

给定一个包含以下列的文件:

date, userid, amount

其中日期采用yyyy-mm-dd格式。我正在尝试使用 python pandas 将多年的 yyyy-mm-dd 分配为累积的周数。例如:

2017-01-01  => 1
2017-12-31  => 52
2018-01-01  => 53

df_counts_dates=pd.read_csv("counts.csv")

print (df_counts_dates['date'].unique())

df = pd.to_datetime(df_counts_dates['date'])

print (df.unique())


print (df.dt.week.unique())

由于数据包含 2017 年 8 月至 2018 年 8 月日期,因此以上返回

[33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52  1  2  3  4  5
  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
 31 32]

我想知道是否有任何简单的方法可以使第一个日期为“第 1 周”,并使周数跨年累加,而不是在每年年初变为 1?

最佳答案

我认为需要一种不同的方法 - 首先减去列的所有值,timedeltas 转换为 days ,地板除以 7 和最后一个 1(不以 0 开始):

rng = pd.date_range('2017-08-01', periods=365)
df = pd.DataFrame({'date': rng, 'a': range(365)})  
print (df.head())
        date  a
0 2017-08-01  0
1 2017-08-02  1
2 2017-08-03  2
3 2017-08-04  3
4 2017-08-05  4

w = ((df['date'] - df['date'].iloc[0]).dt.days // 7 + 1).unique()
print (w)
[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 49 50 51 52 53]

关于python pandas 将多年的 yyyy-mm-dd 分配为累计周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51667225/

相关文章:

python - pyqt向导将字段注册为字符串而不是整数

javascript - 将 SVG 导出为 PDF,且组/图层完好无损

python - Matplotlib 干扰图奇怪的图案

python - 重置从groupby或pivot创建的pandas DataFrame的索引?

pandas HDFStore 按日期时间索引选择行

ubuntu - 为 Linux 分发 Python 软件

python - 对具有多个值的 python 列表进行阈值处理

python - 最有效的字符串相似度度量函数

python-3.x - 如何使用 starts_with jmespath.search 字典键

python - 查找数字数据帧的数字根