首页 > 解决方案 > 如何找到两列之间的月份差异并将其保存在新列中?

问题描述

我有一个大数据框(片段如下):

                              start_date                         finish_date
2842    2019-02-16 19:35:55.125766+00:00    2019-06-23 08:10:42.867492+00:00
2844    2019-05-29 18:03:54.230822+00:00    2019-06-05 08:06:37.896891+00:00
2846    2019-03-26 10:29:14.626280+00:00    2019-03-28 03:00:12.350836+00:00
2847    2019-04-22 16:29:30.480639+00:00    2019-04-24 18:02:09.869749+00:00
2852    2019-06-28 11:32:32.104132+00:00    2019-07-07 20:15:47.000026+00:00
2853    2019-03-21 17:20:50.030024+00:00    2019-03-27 03:18:26.652882+00:00
2854    2019-07-12 13:46:24.119986+00:00    2019-09-16 14:36:16.995393+00:00

start_date 和 finish_date 是 datetime64 格式。

start_date我需要创建一个新列,其中包含和之间的几个月的计算结果finish_date

对于我使用的每个字符串

len(pd.date_range(start=df.loc[2844, 'start_date'], end=df.loc[2844, 'finish_date'], freq='M'))

但我不知道如何将它应用于每一行......逐行。我想必须使用一些 lambda...

这个:

df['length'] = pd.date_range(start=df['start_date'], end=df['finish_date'], freq='M')

出现错误...

预期结果:

                              start_date                         finish_date    length
2842    2019-02-16 19:35:55.125766+00:00    2019-06-23 08:10:42.867492+00:00    4
2844    2019-05-29 18:03:54.230822+00:00    2019-06-05 08:06:37.896891+00:00    1
2846    2019-03-26 10:29:14.626280+00:00    2019-03-28 03:00:12.350836+00:00    0
2847    2019-04-22 16:29:30.480639+00:00    2019-04-24 18:02:09.869749+00:00    0
2852    2019-06-28 11:32:32.104132+00:00    2019-07-07 20:15:47.000026+00:00    1
2853    2019-03-21 17:20:50.030024+00:00    2019-03-27 03:18:26.652882+00:00    0
2854    2019-07-12 13:46:24.119986+00:00    2019-09-16 14:36:16.995393+00:00    2

标签: pythonpandas

解决方案


Series.dt.month由于两个日期都是 dtype datetime 您可以使用属性计算月份之间的差异:

df['length']=(df['finish_date'].dt.month-df['start_date'].dt.month).abs()

推荐阅读