为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得两个日期时间列熊猫之间的时间差异?

如何获得两个日期时间列熊猫之间的时间差异?

SMILET 2022-08-02 18:35:29
我的数据集中有两个不同的列,       start    end0   2015-01-01  2017-01-011   2015-01-02  2015-06-022   2015-01-03  2015-12-033   2015-01-04  2020-11-254   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'))
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

尝试:


df["year_diff"]=df["end"].dt.year.sub(df["start"].df.year)

df["month_diff"]=df["end"].dt.month.sub(df["start"].df.month)


查看完整回答
反对 回复 2022-08-02
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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


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天,一个月短一天,这将不计算在内。


查看完整回答
反对 回复 2022-08-02
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信