如何按星期按日期分组

时间:2019-12-12 23:51:00

标签: python pandas 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


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

2 个答案:

答案 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