两个DatetimeIndex之间的pandas elementwise差异

时间:2016-09-23 14:20:22

标签: python pandas

是否有一个大熊猫惯用的方法来找出两只大熊猫DatetimeIndex之间的天数差异?

>>> d1 = pd.to_datetime(['2000-01-01', '2000-01-02'])
>>> d2 = pd.to_datetime(['2001-01-01', '2001-01-02'])

-运算符设置为差异,即d1中的日期,但不是d2中的日期。

>>> d1-d2
DatetimeIndex(['2000-01-01', '2000-01-02'], dtype='datetime64[ns]', freq=None)

IMO,这与numpy和纯python行为不一致。甚至不是熊猫本身

>>> d2[0]-d1[0]
Timedelta('366 days 00:00:00')

这就是我想要的,但很难看。

>>> [d.days for d in d2.to_pydatetime() - d1.to_pydatetime()]
[366, 366]

2 个答案:

答案 0 :(得分:1)

您直接使用np.subtract

np.subtract(d2, d1)

结果会给你一个TimedeltaIndex:

TimedeltaIndex(['366 days', '366 days'], dtype='timedelta64[ns]', freq=None)

然后如果想在那上使用.days

另一种可能的方式:

pd.to_timedelta(d2.values - d1.values).days

您将离开:

array([366, 366])

答案 1 :(得分:1)

这是因为dtypedatetimeIndex所以算术操作是按设计设置的,如果你从它们构造Series那么你可以根据需要执行逐元素减法:

In [349]:
d1 = pd.to_datetime(['2000-01-01', '2000-01-02'])
d2 = pd.to_datetime(['2001-01-01', '2001-01-02'])
s1 = pd.Series(d1)
s2 = pd.Series(d2)
(s1-s2).abs()

Out[349]:
0   366 days
1   366 days
dtype: timedelta64[ns]