【发布时间】:2016-09-16 16:02:21
【问题描述】:
我想知道是否有一种方法可以计算数据框中每小时数据的累积 p_value。例如,如果您有 24 小时的数据,则会有 24 次 p_value 测量值,但它们会在当前小时之前的所有小时内累积。
通过按小时对数据进行分组,然后应用我编写的 agg_func 来计算计算 p 所需的所有相关统计数据,我已经能够获得每个小时的 p_value。但是,这种方法不会产生累积结果,只会产生每个小时的 p。
给定一个带有列 id、ts(作为 unix 时间戳)、ab_group、result 的 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)
注意z_test 是我自己的包含 z_test 实现的模块。
非常感谢任何有关如何修改累积 p 的建议。
【问题讨论】:
-
我不认为 p 值本身或其计算的组成部分很容易转化为加法。
-
@AmiTavory 我想出了一个解决方案。最终不得不将每个组件设置为全局变量并在函数内更新。
标签: python pandas grouping p-value