Python 如何获得两个datetime列之间的时间差?

Python 如何获得两个datetime列之间的时间差?,python,pandas,Python,Pandas,我的数据集中有两个不同的列 start end 0 2015-01-01 2017-01-01 1 2015-01-02 2015-06-02 2 2015-01-03 2015-12-03 3 2015-01-04 2020-11-25 4 2015-01-05 2025-07-27 我想要以一种特定的方式来区分开始和结束,这是我想要的输出 year_diff month_diff 2 1

我的数据集中有两个不同的列

       start    end
0   2015-01-01  2017-01-01
1   2015-01-02  2015-06-02
2   2015-01-03  2015-12-03
3   2015-01-04  2020-11-25
4   2015-01-05  2025-07-27
我想要以一种特定的方式来区分开始和结束,这是我想要的输出

year_diff  month_diff
        2           1
        0           6
        0          12
        5          11
       10           7
在这里,日子对我来说并不重要,只有月份和年份。我试着用周期来获取差异,但它只在几个月内返回不同的结果。我怎样才能达到我想要的输出

df['end'].dt.to_period('M') - df['start'].dt.to_period('M'))
尝试:

尝试:


此解决方案假定构成一年(365)和一个月(30)的天数是恒定的。如果datetime是字符串,请将其转换为datetime对象。在熊猫数据帧中,可以这样做

def to_datetime(dataframe):
    new_dataframe = pd.DataFrame()
    new_dataframe[0] = pd.to_datetime(dataframe[0], format="%Y-%m-%d")
    new_dataframe[1] = pd.to_datetime(dataframe[1], format="%Y-%m-%d")
    return new_dataframe
接下来,可以从第0列中减去第1列,以天为单位计算差值。我们可以使用
/
操作符将这个数字除以365,得到整年的数字。我们可以使用
%
运算符获得剩余天数,然后使用
/
运算符将剩余天数除以30,得到整月数

def get_time_diff(dataframe):
    dataframe[2] = dataframe[1] - dataframe[0]
    diff_dataframe = pd.DataFrame(columns=["year_diff", "month_diff"])
    for i in range(0, dataframe.index.stop):
        year_diff = dataframe[2][i].days // 365
        month_diff = (dataframe[2][i].days % 365) // 30
        diff_dataframe.loc[i] = [year_diff, month_diff]

    return diff_dataframe
使用这些函数的输出示例如下

       start        end days_diff year_diff month_diff
0 2019-10-15 2021-08-11  666 days         1         10
1 2020-02-11 2022-10-13  975 days         2          8
2 2018-12-17 2020-09-16  639 days         1          9
3 2017-01-03 2017-01-28   25 days         0          0
4 2019-12-21 2022-03-10  810 days         2          2
5 2018-08-08 2019-05-07  272 days         0          9
6 2017-06-18 2020-08-01 1140 days         3          1
7 2017-11-14 2020-04-17  885 days         2          5
8 2019-08-19 2020-05-10  265 days         0          8
9 2018-05-05 2020-09-08  857 days         2          4

注意:这将给出整年数和月数。因此,如果剩余29天,比一个月少一天,则不计算该天数。

此解决方案假定构成一年(365)和一个月(30)的天数是恒定的。如果datetime是字符串,请将其转换为datetime对象。在熊猫数据帧中,可以这样做

def to_datetime(dataframe):
    new_dataframe = pd.DataFrame()
    new_dataframe[0] = pd.to_datetime(dataframe[0], format="%Y-%m-%d")
    new_dataframe[1] = pd.to_datetime(dataframe[1], format="%Y-%m-%d")
    return new_dataframe
接下来,可以从第0列中减去第1列,以天为单位计算差值。我们可以使用
/
操作符将这个数字除以365,得到整年的数字。我们可以使用
%
运算符获得剩余天数,然后使用
/
运算符将剩余天数除以30,得到整月数

def get_time_diff(dataframe):
    dataframe[2] = dataframe[1] - dataframe[0]
    diff_dataframe = pd.DataFrame(columns=["year_diff", "month_diff"])
    for i in range(0, dataframe.index.stop):
        year_diff = dataframe[2][i].days // 365
        month_diff = (dataframe[2][i].days % 365) // 30
        diff_dataframe.loc[i] = [year_diff, month_diff]

    return diff_dataframe
使用这些函数的输出示例如下

       start        end days_diff year_diff month_diff
0 2019-10-15 2021-08-11  666 days         1         10
1 2020-02-11 2022-10-13  975 days         2          8
2 2018-12-17 2020-09-16  639 days         1          9
3 2017-01-03 2017-01-28   25 days         0          0
4 2019-12-21 2022-03-10  810 days         2          2
5 2018-08-08 2019-05-07  272 days         0          9
6 2017-06-18 2020-08-01 1140 days         3          1
7 2017-11-14 2020-04-17  885 days         2          5
8 2019-08-19 2020-05-10  265 days         0          8
9 2018-05-05 2020-09-08  857 days         2          4
注意:这将给出整年数和月数。因此,如果剩余29天,比一个月少一天,则不计算在内