【问题标题】:give pandas date columns ordinal value给熊猫日期列序数值
【发布时间】:2021-02-08 16:54:26
【问题描述】:

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

>>>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是第二天...)

我看过this 的帖子,但它并没有解决同样的问题(它们给出了重复的“代码”,而我想从第 3 天开始“计算”唯一日期并为每个日期指定序数。 我也尝试过使用"tooordinal",但它只是更改了日期值而不计算它。

【问题讨论】:

    标签: python pandas datetime ordinal


    【解决方案1】:

    将“日期”列转换为日期时间,减去第一天,取结果 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。
    • 或者您可以查看relativedelta 库,它会根据开始日期、结束日期和单位(日、月、年等)自动为您执行增量
    • 顺便说一句,还有另一个选项,有人发布然后删除:使用 Series.rank,例如作为(df['date'].rank(method='dense')-1)+experiment_day_start。不过我更喜欢 timedelta 方式,因为我认为这更具可读性。
    • 要添加到 MrFuppes 的评论中,pandas 的 to_datetime 假定默认情况下该月份排在第一位,并尝试每条记录,而不会发出警告。所以['30-11-2020', '01-12-2020'] 将被解释为 [30 nov, 12 jan]。
    • @Swier:这是一个非常好的观点,因为这会导致非常奇怪的结果......
    猜你喜欢
    • 2021-07-18
    • 2014-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2022-10-17
    相关资源
    最近更新 更多