【问题标题】:Add days to date in pandas在熊猫中添加日期
【发布时间】:2017-08-03 18:21:58
【问题描述】:

我有一个包含 2 列的数据框,一列是日期,另一列是浮点数。 我想添加这两个以获得以下内容:

   Index           Date           Days           NewDate
     0           20-04-2016        5           25-04-2016
     1           16-03-2015       3.7          20-03-2015

如您所见,如果有小数,则将其转换为 int 为 3.1--> 4(天)。 我有一些奇怪的问题,所以我很感激任何帮助。 谢谢!

【问题讨论】:

标签: python date pandas datetime numpy


【解决方案1】:

首先,确保Date 列是一个日期时间对象:

df['Date'] = pd.to_datetime(df['Date'])

然后,我们可以通过上限将Days 列转换为 int 并将其转换为 pandas Timedelta:

temp = df['Days'].apply(np.ceil).apply(lambda x: pd.Timedelta(x, unit='D'))

可以添加日期时间对象和时间增量:

df['NewDate'] = df['Date'] + temp

【讨论】:

  • 如何将Days 添加到今天的日期 并创建NewDate
  • 请打开一个新问题。这与原始问题没有直接关系。
  • 我发了一个新的question
【解决方案2】:

您可以将 Days 列转换为 timedelta 并将其添加到 Date 列:

import pandas as pd

df['NewDate'] = pd.to_datetime(df.Date) + pd.to_timedelta(pd.np.ceil(df.Days), unit="D")
df

【讨论】:

  • 如何通过将Days 添加到今天的日期来创建NewDate?即df['NewDate'] = ??date_of_today?? + pd.to_timedelta(pd.np.ceil(df.Days), unit="D")
  • 无法添加 DatetimeIndex 和 DatetimeIndex
  • 最好的,现在,直接使用 numpy 而不是 pandas pd.np.ceil(df.Days) --> np.ceil(df.Days)
【解决方案3】:

使用combine 进行两列计算,使用pd.DateOffset 添加days

df['NewDate'] = df['Date'].combine(df['Days'], lambda x,y: x + pd.DateOffset(days=int(np.ceil(y))))

输出:

        Date  Days    NewDate
0 2016-04-20   5.0 2016-04-25
1 2016-03-16   3.7 2016-03-20

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2021-07-25
    • 2022-01-07
    • 2018-07-25
    • 1970-01-01
    • 2016-11-09
    • 2019-05-20
    相关资源
    最近更新 更多