python - 如何确定 pandas 数据框的数据捕获?

标签 python pandas resampling

我正在处理由不完整时间序列组成的每小时监控数据,即一年(或几年)中的几个小时将不会出现在我的数据框中。

我想确定数据捕获,即一个月、一个季节或一年中存在的值的百分比。

这适用于以下代码(用于为每月重新采样编写的演示)-但是该代码段似乎效率较低,因为我需要创建第二个每小时数据帧,并且需要对两个数据帧重新采样。

有没有更优雅的解决方案?

import numpy as np
import pandas as pd

# create dummy series
t1 = pd.date_range(start="1997-01-01 05:00", end="1997-04-25 17:00", freq="H")
t2 = pd.date_range(start="1997-06-11 15:00", end="1997-06-15 12:00", freq="H")
t3 = pd.date_range(start="1997-06-18 00:00", end="1997-08-22 23:00", freq="H")

df1 = pd.DataFrame(np.random.randn(len(t1)), index=t1)
df2 = pd.DataFrame(np.random.randn(len(t2)), index=t2)
df3 = pd.DataFrame(np.random.randn(len(t3)), index=t3)

df = pd.concat((df1, df2, df3))

# create time index with complete hourly coverage over entire years
tstart = "%i-01-01 00:00"%(df.index.year[0])
tend = "%i-12-31 23:00"%(df.index.year[-1])
tref = pd.date_range(start=tstart, end=tend, freq="H")
dfref = pd.DataFrame(np.zeros(len(tref)), index=tref)

# count number of values in reference dataframe and actual dataframe
# Example: monthly resampling
cntref = dfref.resample("MS", "count")
cnt = df.resample("MS", "count").reindex(cntref.index).fillna(0)

for i in range(len(cnt.index)):
    print cnt.index[i], cnt.values[i], cntref.values[i], cnt.values[i] / cntref.values[i]

最佳答案

pandas' Timedelta 就可以了:

# Time delta between rows of the df
df['index'] = df.index
pindex = df['index'].shift(1)
delta = df['index'] - pindex

# Any delta > 1H means a missing data period
missing_delta = delta[delta > pd.Timedelta('1H')]

# Sum of missing data periods divided by total period
ratio_missing = missing_delta.sum() / (df.index[-1] - df.index[0])

关于python - 如何确定 pandas 数据框的数据捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35686664/

相关文章:

python - pandas 中 resample 和 asfreq 的不同行为

python - 如何使用 Python pandas 有效地将每小时数据转换为一年中每一天的日期和时间?

python - 如何检查路径是否是python 3中的pip可安装包

python - Python中车辆位置估计的卡尔曼滤波器参数定义

python - 如何使用 Pandas 将多行字符串合并为一行?

python - Scipy 插值如何将 3x3 矩阵调整大小/重新采样为 5x5?

python - Python。向字典中的键添加多个项目

python - 清理 Excel 文档 - 根据其内容格式化单元格

python - 如何删除行和列的索引名称? (轴=0 & 轴=1)

python - Linux 和 Windows 中的输出不同?