全部。
我有一个排序的时间序列 my_ts
,并且我需要找到该系列的所有元素之间的成对差异(低于某个名为 horizon
的阈值)(而不仅仅是连续元素之间)。
我编写了以下代码来执行此操作,但正如您所看到的,它应用了 itertools,这在 pandas 环境中感觉是不必要的。
from itertools import combinations
my_ts = pd.Series(pd.date_range('1/1/2018', periods=6, freq='d'))
def count_gaps(ts, horizon):
# returns counts of all gaps shorter than horizon
diffs = ((t2-t1) for (t1, t2) in combinations(ts, 2) if t2-t1<=horizon)
return pd.Series(diffs).value_counts()
count_gaps(my_ts, horizon=pd.to_timedelta(3, unit='d'))
对于更加 Pandas 化(并且希望更快)的解决方案有什么建议吗?
最佳答案
我认为你可以
s=pd.DataFrame(columns=my_ts,index=my_ts).apply(lambda x : x.name-x.index)
s.mask((s<pd.Timedelta('1 days'))|(s>pd.Timedelta('3 days'))).stack().value_counts()
Out[528]:
1 days 5
2 days 4
3 days 3
dtype: int64
关于python - 查找 pandas 系列中元素之间的所有成对差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49280856/