【问题标题】:Convert monthly data to weekly data - Python将每月数据转换为每周数据 - Python
【发布时间】:2021-03-27 05:55:05
【问题描述】:

我有一个如下所示的数据框:

ID Date     Volume Sales
1  2020-02   10     4
1  2020-03   8      6
2  2019-12   6      8
2  2019-10   4      10

这里的数据是每月的,我想将其转换为每周。将数量和销售额列除以该月的周数。

我已经尝试过,但只成功地逐列执行此操作。有没有一种简单的方法可以做到这一点,也可以在大型数据集上处理。

将每周转换回每月的步骤是否类似? 谢谢!

【问题讨论】:

  • 您可以使用df.columns 属性,并且您可以在多个列上应用相同的逻辑,例如您可以使用df[df.columns[2:]]=df[df.columns[2:]]/7的当前数据框@
  • 请添加最小可重现代码sn-p,以便您的问题得到解决
  • 您可以使用带有适当参数的df.resample()

标签: python pandas dataframe


【解决方案1】:

据我了解,您可以尝试使用pd.offset 创建基于Date 列的所有周的数组,然后分解并groupby+transform 以获取每个组在除法中使用它的计数:

s = pd.to_datetime(df['Date'])
u = (df.assign(Weeks=[pd.date_range(*x,freq='W')
                  for x in zip(s,s.add(pd.offsets.MonthEnd()))]).explode("Weeks"))

u[['Volume','Sales']] = u[['Volume','Sales']].div(
                        u.groupby("Date")['Date'].transform("count"),axis=0)

print(u)

   ID     Date  Volume  Sales      Weeks
0   1  2020-02     2.5    1.0 2020-02-02
0   1  2020-02     2.5    1.0 2020-02-09
0   1  2020-02     2.5    1.0 2020-02-16
0   1  2020-02     2.5    1.0 2020-02-23
1   1  2020-03     1.6    1.2 2020-03-01
1   1  2020-03     1.6    1.2 2020-03-08
1   1  2020-03     1.6    1.2 2020-03-15
1   1  2020-03     1.6    1.2 2020-03-22
1   1  2020-03     1.6    1.2 2020-03-29
2   2  2019-12     1.2    1.6 2019-12-01
2   2  2019-12     1.2    1.6 2019-12-08
2   2  2019-12     1.2    1.6 2019-12-15
2   2  2019-12     1.2    1.6 2019-12-22
2   2  2019-12     1.2    1.6 2019-12-29
3   2  2019-10     1.0    2.5 2019-10-06
3   2  2019-10     1.0    2.5 2019-10-13
3   2  2019-10     1.0    2.5 2019-10-20
3   2  2019-10     1.0    2.5 2019-10-27

【讨论】:

  • 感谢您的回复。问题:将每周数据转换为每月数据的逻辑是否相同?
猜你喜欢
  • 2013-05-02
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
相关资源
最近更新 更多