Pandas Datetime:计算两列中日期之间的周数

问题描述 投票:0回答:3

假设我有一个数据框,其中有两列包含日期,我想创建一个新列,其值是这些日期之间的月数。

>df

Index   Date1         Date2
1       2012/03/07    2013/03/16
2       2012/12/05    2012/12/25
3       2010/06/30    2013/05/19
4       2002/11/02    2011.06.08


df["Date1"]= pd.to_datetime(df["Date1"])
df["Date2"]= pd.to_datetime(df["Date2"])

日期 1 始终在日期 2 之前。我目前的方法需要大约 10 个步骤,而且我很确定有一种更简单的方法可以做到这一点。想法?

python datetime pandas
3个回答
8
投票

请参阅此链接:http://pandas.pydata.org/pandas-docs/dev/timeseries.html#time-deltas

(df['Date2']-df['Date1']).apply(lambda x: x/np.timedelta64(1,'M'))

对于 numpy >=1.7(如果您使用的是 1.6.1,请参阅链接)

我不确定它会对分数做什么。 (通常我会除以

np.timedelta64(1,'D')
,然后除以 30,得到月份的小数部分(作为浮点数)


0
投票

使用 pandas 2.2 可以做得更好,无需使用 numpy。

data['time_between'] = (data['end'] - data['start']).apply(lambda x: int(round((x/pd.Timedelta(1, 'w')), 0)))

我将周四舍五入并转换为整数。但根据要求,您可以仅使用

lambda x: x/pd.Timedelta(1, 'w')
或通过舍入到特定精度来将其保留为浮点数。

如果您想要月份,请在 Timedelta 对象中使用“M”而不是“w”。


-1
投票

我不确定如何在 python 中执行此操作,但我会执行的步骤:

  • 将日期转换为自纪元以来的天数
  • 从日期 2 中减去日期 1
  • 除以7
© www.soinside.com 2019 - 2024. All rights reserved.