Python 为日期列指定序号值

Python 为日期列指定序号值,python,pandas,datetime,ordinal,Python,Pandas,Datetime,Ordinal,我有不同日期和时间的测量数据框: >>>date hour value 0 29-11-2020 8 0.231 1 29-11-2020 9 0.245 2 29-11-2020 10 0.475 3 30-11-2020 8 0.214 4 30-11-2020 9 0.239 5 30-11-2020 10 0.312 ... 该表描述了每天每小时的测量值。从实验的第三天到第15天进行测

我有不同日期和时间的测量数据框:

>>>date       hour   value
0 29-11-2020   8     0.231
1 29-11-2020   9     0.245
2 29-11-2020   10    0.475
3 30-11-2020   8     0.214
4 30-11-2020   9     0.239
5 30-11-2020   10    0.312
...
该表描述了每天每小时的测量值。从实验的第三天到第15天进行测量。 我想创建一个新列,该列将以日期为实验的第几天,例如:

>>>date       hour   value   count
0 29-11-2020   8     0.231    3
1 29-11-2020   9     0.245    3
2 29-11-2020   10    0.475    3
3 30-11-2020   8     0.214    4
4 30-11-2020   9     0.239    4
5 30-11-2020   10    0.312    4
5 01-12-2020   8     0.312    5
5 01-12-2020   9     0.312    5
5 01-12-2020   10    0.521    5
...
(29-11是第三天,30-11是第二天…)

我看过这篇文章,但它并没有解决同样的问题(他们给出重复的“代码”,而我想从第三天开始“计算”唯一的日期,并给每个日期序号)。
我也尝试过使用,但它只是更改了日期值,没有对其进行计数。

将“日期”列转换为datetime,减去第一天,取生成的
timedelta
系列的日期并添加偏移天数:

experiment_day_start = 3

df['date'] = pd.to_datetime(df['date'], dayfirst=True)
df['exp_day'] = (df['date']-df['date'].min()).dt.days + experiment_day_start

df
        date  hour  value  count  exp_day
0 2020-11-29     8  0.231      3        3
1 2020-11-29     9  0.245      3        3
2 2020-11-29    10  0.475      3        3
3 2020-11-30     8  0.214      4        4
4 2020-11-30     9  0.239      4        4
5 2020-11-30    10  0.312      4        4
6 2020-12-01     8  0.312      5        5
7 2020-12-01     9  0.312      5        5
8 2020-12-01    10  0.521      5        5

@Reut:你的日期显然是以天开始的,但是默认情况下,pandas to_datetime假定月份在前,除非你将这个关键字设置为True。或者,你可以查看库,根据起始日期、结束日期和单位(天、月、年等)自动为你计算增量顺便说一句,还有另一个选项,有人发布并删除了它:使用Series.rank,例如as
(df['date'].rank(method='densite')-1)+实验日开始
。不过我更喜欢时间增量的方式,因为我认为这更具可读性。要添加到MrFuppes的评论中,pandas对datetime的假设是,默认情况下,该月是第一个月,并在没有警告的情况下尝试每个记录。因此,
['30-11-2020',01-12-2020']
将被解释为[11月30日,1月12日]@Swier:这是一个很好的观点,因为这会导致非常奇怪的结果。。。