Python 如何按日期时间按周分组

Python 如何按日期时间按周分组,python,pandas,datetime,Python,Pandas,Datetime,我有一个日期列,格式如下2019-08-01 00:03:43我需要一个额外的列,按周和名称对数据进行分组 数据: 我所做的: 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[

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

数据:

我所做的:

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值

这就是您要查找的内容:

from dateutil.parser import parse
import datetime
df['week'] = df.reset_index().apply(lambda x: datetime.datetime.date(parse(x['index'])).strftime("%V"), axis=1).to_numpy()
输出

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

这就是你想要的:

from dateutil.parser import parse
import datetime
df['week'] = df.reset_index().apply(lambda x: datetime.datetime.date(parse(x['index'])).strftime("%V"), axis=1).to_numpy()
输出

           lead_date name week
2019-08-01  00:03:43    a   31
2019-08-01  00:00:00    b   31
2019-08-01  00:03:49    c   31
2019-08-31  23:42:04    a   35
2019-08-31  23:42:04    a   35
2019-08-31  23:42:04    c   35
2019-08-31  23:42:04    a   35
只需使用datetime的dt.week属性即可获取周

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

           lead_date name week
2019-08-01  00:03:43    a   31
2019-08-01  00:00:00    b   31
2019-08-01  00:03:49    c   31
2019-08-31  23:42:04    a   35
2019-08-31  23:42:04    a   35
2019-08-31  23:42:04    c   35
2019-08-31  23:42:04    a   35
如果您的最终目标是按周对数据帧进行分组,则不需要为此创建单独的列。您可以执行类似df.groupbydf['lead_date'].dt.week的操作,因为_index=False.count

您可以使用datetime的dt.week属性来获取周

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

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

如果您的最终目标是按周对数据帧进行分组,则不需要为此创建单独的列。您可以执行类似df.groupbydf['lead_date'].dt.week的操作,因为_index=False.count

这正是我需要的,但得到了这个错误类型error:'解析器必须是字符串或字符流,而不是int','发生在索引0'这正是我需要的,但得到了这个错误类型error:'解析器必须是字符串或字符流,而不是int','在索引0处发生'