按時間段分組

我有一個表,其中包含id、dates、一個target(可能是多類的,但現在是二進制的,其中1是fail)和一個基于date列的yearmonth列。以下是此表的前8行:

我想為過去的3個月創(chuàng)建回溯特性,這樣對于每一行,我們都會回顧過去,看看id在過去3個月的表現。因此,對于第6行(日期為2015年11月9日)的ex,id A在過去3個日歷月(即8月、9月和10月)的失敗百分比為75%(使用第2-5行)。

df = pd.DataFrame({'id':['A','A','A','A','A','A','A','B'],'date' :['2015-03-16','2015-05-29','2015-08-02','2015-09-05','2015-09-22','2015-10-15','2015-11-09','2015-04-17'],'target':[0,1,1,1,0,1,1,0]} )


df['date'] = pd.to_datetime(df['date'], dayfirst = True)
df['yearmonth'] = df['date'].dt.to_period('M')

agg_dict = {
    "Total_Transactions": pd.NamedAgg(column='target', aggfunc='count'),
    "Fail_Count": pd.NamedAgg(column='target', aggfunc=(lambda x: len(x[x == 1]))),  
    "Perc_Monthly_Fails": pd.NamedAgg(column='target', aggfunc=(lambda x: len(x[x == 1])/len(x)*100))
}


df.groupby(['id','yearmonth']).agg(**agg_dict).reset_index(level = 1)

我使用id和month(見下文)進行了聚合,并嘗試了滾動窗口之類的方法,但找不到一種方法來實際聚合每一行的特定時間段。感謝您的幫助。

? 最佳回答:

您可以通過將數據幀與'id'上的自身合并來實現這一點。

首先,我們將創(chuàng)建一個First of month'fom'列,因為您的日期邏輯希望基于前幾個月而不是具體的日期進行回顧。然后我們將數據幀與它自身合并,帶上索引,這樣我們就可以在最后分配結果。

使用月偏移量,我們可以將其過濾為只將觀察值保持在該行觀察值的3個月內,然后我們groupby原始索引并取'target'的平均值來獲得失敗百分比,我們可以將其分配回(索引上的對齊)。

如果輸出中有NaN,那是因為該行在前3個月沒有觀察到,所以您無法計算。

#df['date'] = pd.to_datetime(df['date'], dayfirst = True)
df['fom'] = df['date'].astype('datetime64[M]')   # Credit @anky

df1 = df.reset_index()
df1 = (df1.drop(columns='target').merge(df1, on='id', suffixes=['', '_past']))

df1 = df1[df1.fom_past.between(df1.fom-pd.offsets.DateOffset(months=3), 
                               df1.fom-pd.offsets.DateOffset(months=1))]

df['Pct_fail'] = df1.groupby('index').target.mean()*100

  id       date  target        fom    Pct_fail
0  A 2015-03-16       0 2015-03-01         NaN   # No Rows to Avg
1  A 2015-05-29       1 2015-05-01    0.000000   # Avg Rows 0
2  A 2015-08-02       1 2015-08-01  100.000000   # Avg Rows 1
3  A 2015-09-05       1 2015-09-01  100.000000   # Avg Rows 2
4  A 2015-09-22       0 2015-09-01  100.000000   # Avg Rows 2 
5  A 2015-10-15       1 2015-10-01   66.666667   # Avg Rows 2,3,4
6  A 2015-11-09       1 2015-11-01   75.000000   # Avg Rows 2,3,4,5
7  B 2015-04-17       0 2015-04-01         NaN   # No Rows to Avg
主站蜘蛛池模板: 黑巨人与欧美精品一区| 爆乳熟妇一区二区三区霸乳| 国产午夜精品一区二区三区极品| 韩国美女vip福利一区| 国内自拍视频一区二区三区| 免费高清在线影片一区| 国产福利电影一区二区三区,免费久久久久久久精 | av无码精品一区二区三区四区| 国产精品无码不卡一区二区三区| 国产成人一区二区三区在线观看| 3d动漫精品成人一区二区三| 国产福利一区二区| 久久精品亚洲一区二区| 成人精品视频一区二区| 中文字幕在线无码一区二区三区| 色窝窝无码一区二区三区色欲| 无码人妻一区二区三区兔费| 国产91精品一区二区麻豆亚洲| 色一乱一伦一图一区二区精品| 精品国产免费观看一区 | 国产午夜精品片一区二区三区| 99偷拍视频精品一区二区| 精品成人一区二区三区四区| 亚洲福利视频一区二区三区| 高清一区高清二区视频| 久久久久人妻一区精品色| 日本一区二区三区中文字幕| 麻豆亚洲av熟女国产一区二| 国产精品亚洲不卡一区二区三区 | 无码国产精品一区二区免费式芒果 | 久久99精品一区二区三区| 国产精品免费综合一区视频| 无码欧精品亚洲日韩一区| 亚洲国模精品一区| 午夜AV内射一区二区三区红桃视 | 青青青国产精品一区二区| 男人的天堂亚洲一区二区三区| 亚洲一区免费在线观看| 国精品无码A区一区二区| 美日韩一区二区三区| 亚洲狠狠久久综合一区77777|