Python 按日历周和跨年份分组

Python 按日历周和跨年份分组,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我想按日历周对数据进行分组。然而,我有多年的数据。因此,不仅仅是周数,而是每年单独计算。这里有一个例子 ix = pd.DatetimeIndex(['2019-12-25', '2019-12-28', '2019-12-31', '2020-01-03']) df = pd.DataFrame({'col': [1, 1, 1, 1]}, index=ix) 我的问题是第一周的几天仍然是前一年 >>> df.groupby([ix.year, ix.month, ix.w

我想按日历周对数据进行分组。然而,我有多年的数据。因此,不仅仅是周数,而是每年单独计算。这里有一个例子

ix = pd.DatetimeIndex(['2019-12-25', '2019-12-28', '2019-12-31', '2020-01-03'])
df = pd.DataFrame({'col': [1, 1, 1, 1]}, index=ix)
我的问题是第一周的几天仍然是前一年

>>> df.groupby([ix.year, ix.month, ix.week]).count()

            count
2019 12 1       1
        52      2
2020 1  1       1

我如何分组以产生日历周?在这里,它将产生两组两行。

从纪元日期(1970年1月1日)开始计算周数可能会有所帮助

day_delta = pd.to_datetime(df.index) - pd.to_datetime('19700101')
df['day'] = (day_delta / np.timedelta64(1, 'D')).astype(int) - 3     # considering week start as sunday
df['week'] = df['day'].apply(lambda x: int(x / 7))
print(df)
输出:

            col    day  week
2019-12-25    1  18252  2607
2019-12-28    1  18255  2607
2019-12-31    1  18258  2608
2020-01-03    1  18261  2608
这使得2019-12-31和2020-01-03在同一周内


我想您需要计算从纪元日期算起的月数和年数,并使用年、月和周数(从纪元日期算起)对它们进行分组。

从纪元日期算起的周数(1970年1月1日)可能会有所帮助

day_delta = pd.to_datetime(df.index) - pd.to_datetime('19700101')
df['day'] = (day_delta / np.timedelta64(1, 'D')).astype(int) - 3     # considering week start as sunday
df['week'] = df['day'].apply(lambda x: int(x / 7))
print(df)
输出:

            col    day  week
2019-12-25    1  18252  2607
2019-12-28    1  18255  2607
2019-12-31    1  18258  2608
2020-01-03    1  18261  2608
这使得2019-12-31和2020-01-03在同一周内


我想你需要从纪元日期开始计算月数和年数,并使用年、月和周数(从纪元日期开始)对它们进行分组。

你是否尝试过
.weekofyear
,但不确定这是否与
.week
?@davidbilla在我的经验中是一样的:/我这么认为的。我想当你得到。19年12月31日的一周是1,因为没有第53周week@davidbilla是的,没有年度方面就可以了。我想我们需要从大纪元时间计算周数。您是否尝试过
.weekofyear
,但不确定这是否与
.week
?@davidbilla在我的经验中是一样的:/我想是的。我想当你得到。19年12月31日的一周是1,因为没有第53周week@davidbilla是的,没有年度方面就可以了。我想我们需要从大纪元开始计算周数如果我理解正确,从周一开始的周数应该是
-2
,对吗?如果我理解正确,从周一开始的几周将
-2
,对吗?