python - 每周对 python pandas 数据框进行分组(从星期一开始)

标签 python pandas datetime pandas-groupby

我有一个包含每天值的数据框(请参见下面的 df)。 我想每周对“预测”字段进行分组,但将星期一作为一周的第一天。

目前我可以通过 pd.TimeGrouper('W') 来做到这一点(见下面的 df_final)但是它从周日开始对一周进行分组(见下面的 df_final)

import pandas as pd
data = [("W1","G1",1234,pd.to_datetime("2015-07-1"),8),
        ("W1","G1",1234,pd.to_datetime("2015-07-30"),2),
        ("W1","G1",1234,pd.to_datetime("2015-07-15"),2),
        ("W1","G1",1234,pd.to_datetime("2015-07-2"),4),
        ("W1","G2",2345,pd.to_datetime("2015-07-5"),5),
        ("W1","G2",2345,pd.to_datetime("2015-07-7"),1),
        ("W1","G2",2345,pd.to_datetime("2015-07-9"),1),
        ("W1","G2",2345,pd.to_datetime("2015-07-11"),3)]

labels = ["Site","Type","Product","Date","Forecast"]
df = pd.DataFrame(data,columns=labels).set_index(["Site","Type","Product","Date"])
df


                              Forecast
Site Type Product Date                
W1   G1   1234    2015-07-01         8
                  2015-07-30         2
                  2015-07-15         2
                  2015-07-02         4
     G2   2345    2015-07-05         5
                  2015-07-07         1
                  2015-07-09         1
                  2015-07-11         3



df_final = (df
     .reset_index()
     .set_index("Date")
     .groupby(["Site","Product",pd.TimeGrouper('W')])["Forecast"].sum()
     .astype(int)
     .reset_index())
df_final["DayOfWeek"] = df_final["Date"].dt.dayofweek
df_final

  Site  Product       Date  Forecast  DayOfWeek
0   W1     1234 2015-07-05        12          6
1   W1     1234 2015-07-19         2          6
2   W1     1234 2015-08-02         2          6
3   W1     2345 2015-07-05         5          6
4   W1     2345 2015-07-12         5          6

最佳答案

使用W-MON代替W,检查anchored offsets :

df_final = (df
     .reset_index()
     .set_index("Date")
     .groupby(["Site","Product",pd.Grouper(freq='W-MON')])["Forecast"].sum()
     .astype(int)
     .reset_index())

df_final["DayOfWeek"] = df_final["Date"].dt.dayofweek
print (df_final)
  Site  Product       Date  Forecast  DayOfWeek
0   W1     1234 2015-07-06        12          0
1   W1     1234 2015-07-20         2          0
2   W1     1234 2015-08-03         2          0
3   W1     2345 2015-07-06         5          0
4   W1     2345 2015-07-13         5          0

关于python - 每周对 python pandas 数据框进行分组(从星期一开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46562401/

相关文章:

Python 在 Ruby 中的枚举?

javascript - 无法使用 Stripe 创建信用卡 token (django)

python - 努力使用 Docker 卷和 Flask 写入文件

python - Python 中迭代两个键

c++ - add_month 从 boost::gregorian 中删除?

python - 在 Python 中写入 csv 文件

python - pandas.DataFrame.sum() 参数 "min_count"相当于 pandas 0.22 之前的版本

pandas - 将行中的每个值与 pandas 数据框中的其他行配对

java - 当前日期和时间 ("Wall"任何时区的日期和时间

javascript - 有没有更简单的方法来编写这个方法?