按周分组和求和

Posted

技术标签:

【中文标题】按周分组和求和【英文标题】:Group and sum by week 【发布时间】:2020-09-16 03:38:33 【问题描述】:

我有一个数据框,其中的列按天按这种格式显示:

a    b    c     01/01/2020  01/02/2020  01/03/2020 ...
1000 2000 3000  2           5           7
.
.
. 

这些只是任意值。我想要的是汇总日期列并按周对它们进行分组,例如week_1, week_2,... 等等。所以对于上面的例子,它看起来像:

a    b    c     week_1...
1000 2000 3000  14
.
.
. 

有没有一种干净的方法来处理列?我知道我可以通过选择日期列并将它们在轴上求和来对所有列求和,但我不确定每周如何进行。任何帮助表示赞赏!

【问题讨论】:

您可能需要融合数据框,创建一个新列来指示它们所在的组,然后进行旋转和求和 【参考方案1】:

你可以这样做:

# move `a`, `b`, `c` out of columns
df = df.set_index(['a','b','c'])

# convert columns to datetime
df.columns = pd.to_datetime(df.columns)

# groupby sum:
(df.groupby(df.columns.week, axis=1)
   .sum() 
   .add_prefix('week_')
   .reset_index()
)

输出:

      a     b     c   week_1
0  1000  2000  3000       14

【讨论】:

【参考方案2】:

尝试.stack.melt 将列放在行上,并尝试dt.week 获取周数。然后做一个groupby。这是周号的帖子:converting a pandas date to week number

【讨论】:

以上是关于按周分组和求和的主要内容,如果未能解决你的问题,请参考以下文章

按周/月/等和 ActiveRecord 分组?

按周分组,如何获得空周?

sql 按周分组在MSSQL中

如何使用 Django ORM 按周分组

使用 concat 按周分组 SQL

如何在打字稿/离子2中按周分组时间戳?