簡體   English   中英

每小時計算熊貓的累積p_value

[英]Calculate cumulative p_value hourly in pandas

我想知道是否有一種方法可以計算數據幀中每個小時數據的累積p_value。 例如,如果您有24小時的數據,則將對p_value進行24次測量,但是它們將在當前小時之前的所有小時內累積。

通過按小時對我的數據進行分組,然后應用我編寫的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)

注意z_test是我自己的模塊,其中包含z_test的實現。

非常感謝您提供有關如何針對累積p修改此值的任何建議。

所以我自己想出了一種解決方法。

calc_p()是修改calc_p() ,使其利用全局變量,因此每次由aggfunc調用時都可以使用更新的值。 下面是編輯后的代碼:

def calc_p(group):
    global df_old_len, df_new_len, clicks_old, clicks_new
    clicks_old += len(group[(group.landing_page == 'old_page') & (group.converted == 1)])
    clicks_new += len(group[(group.landing_page == 'new_page') & (group.converted == 1)])
    df_old_len += len(group[group.landing_page == 'old_page'])
    df_new_len += len(group[group.landing_page == 'new_page'])
    ctr_old = float(clicks_old)/df_old_len
    ctr_new = float(clicks_new)/df_new_len
    z_score, p_val, null = z_test.z_test(ctr_old, ctr_new, df_old_len, df_new_len, effect_size=0.001)
    return p_val

# Initialize global values to 0 for cumulative calc_p
df_old_len = 0
df_new_len = 0
clicks_old = 0
clicks_new = 0

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM