我在使用扩展窗口的自定义转换时遇到问题。我有一个功能:
def minutes_since_previous(x):
'''given datetime-indexed series x,
returns time difference in minutes between the last datetime
and the datetime of the previous nonnull value in each column.'''
x = pd.Series(x) # assumes aready sorted, else add .sort_index()
tfinal=x.index[-1]
allprev = x[:-1].dropna() #all prev nonnulls.
if (len(allprev) > 0):
tprev = allprev.index[-1]
return (tfinal - tprev)
else:
return np.nan
和一系列:
x
Out[116]:
datetime
2017-06-05 22:01:20.000 81.070099
2017-06-05 22:25:24.235 NaN
2017-06-05 22:33:13.000 NaN
2017-06-05 23:10:06.208 NaN
2017-06-05 23:11:40.437 NaN
2017-06-05 23:30:32.911 NaN
2017-06-06 06:19:41.934 NaN
2017-06-06 06:37:11.432 NaN
2017-06-06 06:41:37.000 93.681000
dtype: float32
该功能在整个系列中按预期工作:
In [117]:
minutes_since_previous(x)
Out[117]:
Timedelta('0 days 08:40:17')
但是当应用于扩展窗口时,我失去了索引的日期时间性质,而不是从第一个时间戳开始给出timedeltas,我只是得到整数差异:
In [118]:
x.expanding().apply(minutes_since_previous)
Out[118]:
datetime
2017-06-05 22:01:20.000 NaN
2017-06-05 22:25:24.235 1.0
2017-06-05 22:33:13.000 2.0
2017-06-05 23:10:06.208 3.0
2017-06-05 23:11:40.437 4.0
2017-06-05 23:30:32.911 5.0
2017-06-06 06:19:41.934 6.0
2017-06-06 06:37:11.432 7.0
2017-06-06 06:41:37.000 8.0
dtype: float64
也许.expanding()在内部重置索引,但如果是这样,我怎样才能得到我正在寻找的东西?
我搜索了“pandas expand index”,发现了一个关于multiple columns的问题, 许多,很多都是关于各种重新采样的,但没有一个涉及丢失索引信息。
谢谢...