首页 > 解决方案 > 如何按周组装 groupby datetime

问题描述

我有一个像这样格式化的日期2019-08-01 00:03:43列,我需要一个额外的列,按周和名称对这些数据进行分组。

数据:

cw = 

lead_date              name
2019-08-01 00:03:43    a
2019-08-01 00:00:00    b
2019-08-01 00:03:49    c
2019-08-31 23:42:04    a
2019-08-31 23:42:04    a
2019-08-31 23:42:04    c
2019-08-31 23:42:04    a

我做了什么:

df= cw

df["_id"] = pd.to_datetime(cw["lead_date"])


df['date_minus_time'] = df["_id"].apply( lambda df : datetime.datetime(year=df.year, month=df.month, day=df.day))


df.set_index(df["date_minus_time"],inplace=True)

df['week'] =  df['_id'].resample('W', how='count')


df


它为“week”列提供了所有 Nan 值

标签: pythonpandasdatetime

解决方案


您可以只使用 的dt.week属性datetime来获取星期。

df["lead_date"] = pd.to_datetime(df["lead_date"])
df['week'] = df['lead_date'].dt.week
print(df)

输出

            lead_date   name    week
0   2019-08-01 00:03:00     a   31
1   2019-08-01 00:00:00     b   31
2   2019-08-01 00:03:00     c   31
3   2019-08-31 23:42:00     a   35
4   2019-08-31 23:42:00     a   35
5   2019-08-31 23:42:00     c   35
6   2019-08-31 23:42:00     a   35

如果您的最终目标是按周对数据框进行分组,则无需为此创建单独的列。你可以做类似的事情df.groupby(df['lead_date'].dt.week, as_index = False).count()


推荐阅读