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