我有一个日期列,其格式为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
它为“周”列提供了所有Nan值
答案 0 :(得分:2)
您可以只使用dt.week
的{{1}}属性来获取星期。
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
答案 1 :(得分:1)
这是您要寻找的东西吗
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