我做了多天的观察,几天后就可以观察到一位客户,这是我的数据
customer_id value timestamp
1 1000 2018-05-28 03:40:00.000
1 1450 2018-05-28 04:40:01.000
1 1040 2018-05-28 05:40:00.000
1 1500 2018-05-29 03:40:00.000
1 1090 2018-05-29 04:40:00.000
3 1060 2018-05-18 03:40:00.000
3 1040 2018-05-18 05:40:00.000
3 1520 2018-05-19 03:40:00.000
3 1490 2018-05-19 04:40:00.000
我所做的是df['hour'] = df['timestamp'].dt.hour
,但是它只显示小时,但是我需要的是,因为实验周期可以是2-6天
customer_id value timestamp hour
1 1000 2018-05-28 03:40:00.000 Day1 - 3
1 1450 2018-05-28 04:40:01.000 Day1 - 4
1 1040 2018-05-28 05:40:00.000 Day1 - 5
1 1500 2018-05-29 03:40:00.000 Day1 - 3
1 1090 2018-05-29 04:40:00.000 Day2 - 4
3 1060 2018-05-18 03:40:00.000 Day1 - 3
3 1040 2018-05-18 05:40:00.000 Day1 - 5
3 1520 2018-05-19 03:40:00.000 Day2 - 3
3 1490 2018-05-19 04:40:00.000 Day2 - 4
答案 0 :(得分:2)
将GroupBy.transform
与factorize
一起用于计数date
,最后一起加入:
a = df.groupby('customer_id')['timestamp'].transform(lambda x: pd.factorize(x.dt.date)[0]) + 1
df['hour'] = 'Day' + a.astype(str) + ' - ' + df['timestamp'].dt.hour.astype(str)
print (df)
customer_id value timestamp hour
0 1 1000 2018-05-28 03:40:00 Day1 - 3
1 1 1450 2018-05-28 04:40:01 Day1 - 4
2 1 1040 2018-05-28 05:40:00 Day1 - 5
3 1 1500 2018-05-29 03:40:00 Day2 - 3
4 1 1090 2018-05-29 04:40:00 Day2 - 4
5 3 1060 2018-05-18 03:40:00 Day1 - 3
6 3 1040 2018-05-18 05:40:00 Day1 - 5
7 3 1520 2018-05-19 03:40:00 Day2 - 3
8 3 1490 2018-05-19 04:40:00 Day2 - 4
每组连续日期的替代解决方案:
dates = df['timestamp'].dt.date
a = dates.sub(dates.groupby(df['customer_id']).transform('min')).dt.days + 1