python - 查找 pandas 系列中元素之间的所有成对差异

标签 python pandas time-series

全部。

我有一个排序的时间序列 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/

相关文章:

python - Pandas read_csv converter – 如何处理异常(literal_eval SyntaxError)

时间序列数据的 Django 模型

python - 在 Pandas 中使散点图的标签垂直和水平

python - 在 Pandas groupby 对象中获取比率

python - 我的主要测试代码有什么问题?

python - 将 pandas DataFrame query() 方法与 isin() 结合起来

sql - Postgresql: append 两个具有不同列的表

sql - 如何使用窗口滞后函数对具有多种传感器类型的数据进行分区

python - Jupyter 错误 : "No module named jupyter_core.paths"

python - 无法使用 Pandas 在 Python 中导入数据