【问题标题】:Pandas - resample and standard deviationPandas - 重新采样和标准差
【发布时间】:2014-02-24 03:30:17
【问题描述】:

我有这个数据框:

startTime     endTime  emails_received
index                                             
2014-01-24 14:00:00  1390568400  1390569600    684
2014-01-24 14:00:00  1390568400  1390569300    700
2014-01-24 14:05:00  1390568700  1390569300    438
2014-01-24 14:05:00  1390568700  1390569900    586
2014-01-24 16:00:00  1390575600  1390576500    752
2014-01-24 16:00:00  1390575600  1390576500    743
2014-01-24 16:00:00  1390575600  1390576500    672
2014-01-24 16:00:00  1390575600  1390576200    712
2014-01-24 16:00:00  1390575600  1390576800    708

我运行 resample("10min",how="median").dropna() 得到:

                  startTime     endTime  emails_received
start                                             
2014-01-24 14:00:00  1390568550  1390569450    635
2014-01-24 16:00:00  1390575600  1390576500    712

这是正确的。有什么方法我也可以通过 pandas 轻松获得平均值的标准差?

【问题讨论】:

    标签: python pandas time-series resampling


    【解决方案1】:

    您只需要在 DataFrame 上调用 .std()。这是一个说明性示例。

    创建DatetimeIndex

    在 [38] 中:索引 = pd.DatetimeIndex(start='2000-1-1',freq='1T', period=1000)

    创建一个包含 2 列的 DataFrame

    在 [45] 中:df = pd.DataFrame({'a':range(1000), 'b':range(1000,3000,2)}, index=index)

    DataFrame 的头部、标准和平均值

    在 [47] 中:df.head() 出[47]: 一个 2000-01-01 00:00:00 0 1000 2000-01-01 00:01:00 1 1002 2000-01-01 00:02:00 2 1004 2000-01-01 00:03:00 3 1006 2000-01-01 00:04:00 4 1008 在 [48] 中:df.std() 出[48]: 288.819436 b 577.638872 数据类型:float64 在 [49] 中:df.mean() 出[49]: 499.5 b 1999.0 数据类型:float64

    下采样并执行计算相同的统计分数

    在 [54] 中:df = df.resample(rule="10T",how="median") 在[55]中:df 出[55]: DatetimeIndex:100 个条目,2000-01-01 00:00:00 到 2000-01-01 16:30:00 频率:10T 数据列(共2列): 100 个非空值 b 100 个非空值 数据类型:float64(1)、int64(1) 在 [56] 中:df.head() 出[56]: 一个 2000-01-01 00:00:00 4.5 1009 2000-01-01 00:10:00 14.5 1029 2000-01-01 00:20:00 24.5 1049 2000-01-01 00:30:00 34.5 1069 2000-01-01 00:40:00 44.5 1089 在 [57] 中:df.std() 出[57]: 290.11492 b 580.22984 数据类型:float64 在 [58] 中:df.mean() 出[58]: 499.5 b 1999.0 数据类型:float64

    通过std() 进行下采样

    在 [62] 中:df2 = df.resample(rule="10T", how=np.std) 在[63]中:df2 出[63]: DatetimeIndex:100 个条目,2000-01-01 00:00:00 到 2000-01-01 16:30:00 频率:10T 数据列(共2列): 100 个非空值 b 100 个非空值 数据类型:float64(2) 在 [64] 中:df2.head() 出[64]: 一个 2000-01-01 00:00:00 3.02765 6.055301 2000-01-01 00:10:00 3.02765 6.055301 2000-01-01 00:20:00 3.02765 6.055301 2000-01-01 00:30:00 3.02765 6.055301 2000-01-01 00:40:00 3.02765 6.055301

    以下是来自.std() 方法的文档字符串的信息。

    返回请求轴上的标准偏差。 NA/空值被排除在外 参数 ---------- 轴:{0, 1} 0 表示逐行,1 表示逐列 skipna : 布尔值,默认为 True 排除 NA/空值。如果整行/列为 NA,则结果 将是 NA 级别:int,默认无 如果轴是 MultiIndex(分层),则沿 a 特定级别,折叠成 DataFrame 退货 -------- std : 系列(如果指定级别,则为 DataFrame) 由 N-1(无偏估计量)归一化。

    【讨论】:

    • 看,我想得到每个时间段的标准差,就像我得到每个时间段的平均值一样。我想找到标准的一种方法是手动,通过切片 df[start:start+dt].std() , start+=dt 重复。
    • 更新答案:添加了如何按标准重新采样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2023-02-03
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多