在n个时间序列中搜索相等值的间隔

时间:2019-10-16 20:38:58

标签: python pandas time-series

我尝试搜索所有数据帧都具有相同值(例如1)的时间间隔(例如1分钟)。

给出可能具有不同时间戳的

n 时间序列(df1df2df3,...)。时间序列具有离散状态值01。从这些跳转函数中,我希望创建一个序列,其值永远不应大于1。我想以某种方式将所有帧求和并应用max(x,1)。

import pandas as pd

df1 = pd.DataFrame({'2018-01-01 00:00:00': [1],
                    '2018-01-01 00:01:00': [0],
                    '2018-01-01 00:03:00': [0],
                    '2018-01-01 00:04:00': [1]})

df2 = pd.DataFrame({'2018-01-01 00:00:00': [0],
                    '2018-01-01 00:01:30': [1],
                    '2018-01-01 00:03:00': [0],
                    '2018-01-01 00:04:30': [1]})

df3 = pd.DataFrame({'2018-01-01 00:00:00': [1],
                    '2018-01-01 00:01:15': [1],
                    '2018-01-01 00:03:00': [0],
                    '2018-01-01 00:04:45': [0]})

frames = [df1, df2, df3]
result = pd.concat(frames)

print(df1.add(df2.add(df3,axis="index",fill_value=0),axis="index",fill_value=0))

中间结果:

[3 rows x 8 columns]
   2018-01-01 00:00:00  2018-01-01 00:01:00  2018-01-01 00:01:15  ...  2018-01-01 00:04:00  2018-01-01 00:04:30  2018-01-01 00:04:45
0                    2                  0.0                  1.0  ...                  1.0                  1.0                  0.0

我想有一种更舒适,更直观的方法(concat,merge,join ...)来做到这一点。我将问题分解为:

  1. 在熊猫中获得更多知识:)
  2. 添加/求和数据帧/时间序列
  3. 让值0或1
  4. 评估间隔更改的持续时间

1 个答案:

答案 0 :(得分:0)

IIUC,您可以只使用max

pd.concat([df1,df2,df3], sort=False).max()

或者如果您想按索引对齐数据框:

pd.concat([df1,df2,df3], sort=False).groupby(level=0).max()

输出:

   2018-01-01 00:00:00  2018-01-01 00:01:00  2018-01-01 00:03:00  \
0                    1                  0.0                    0