在pandas中每小时计算累积p_value

时间:2016-09-16 16:02:22

标签: python pandas grouping p-value

我想知道是否有办法计算数据框中每小时数据的累积p_value。例如,如果您有24小时的数据,那么将有24次p_value测量值,但它们将在当前小时之前的所有小时内累积。

我能够通过按小时对数据进行分组,然后应用我编写的agg_func来计算p所需的所有相关统计数据,从而获得每小时的p_value。但是,这种方法不会产生累积结果,只会产生每个小时的p。

给定带有列id,ts(作为unix时间戳),ab_group,结果的df。我运行以下代码来计算小时的p_values。

df['time'] = pd.to_datetime(df.ts, unit='s').values.astype('<m8[h]')

def calc_p(group):
    df_old_len = len(group[group.ab_group == 0])
    df_new_len = len(group[group.ab_group == 1])
    ctr_old = float(len(group[(group.ab_group == 0) & (df.result == 1)]))/ df_old_len
    ctr_new = float(len(group[(group.ab_group == 1) & (df.converted == 1)]))/ df_new_len
    nobs_old = df_old_len
    nobs_new = df_new_len
    z_score, p_val, null = z_test.z_test(ctr_old, ctr_new, nobs_old, nobs_new, effect_size=0.001)
    return p_val

grouped = df.groupby(by='time').agg(calc_p)

N.B。 z_test是我自己的模块,包含z_test的实现。

非常感谢任何关于如何为累积p修改此内容的建议。

1 个答案:

答案 0 :(得分:0)

所以我想出了一个针对这个问题的解决方法。

我想到的是修改bytes以便它使用全局变量,因此每次aggfunc调用时都可以使用更新的值。以下是经过编辑的代码:

calc_p()