熊猫 - 基于一周最后一个工作日的条件列创建



我有一个这样的数据帧,

date       day_of_wk    wk_num  wkend_hol_ind   freq_daily
1/1/2007    Monday        1         H   
1/2/2007    Tuesday       1         H   
1/3/2007    Wednesday     1                       D
1/4/2007    Thursday      1                       D
1/5/2007    Friday        1                       D
1/6/2007    Saturday      1         W   
1/7/2007    Sunday        1         W   
1/8/2007    Monday        2                       D
1/9/2007    Tuesday       2                       D
1/10/2007   Wednesday     2                       D
1/11/2007   Thursday      2                       D
1/12/2007   Friday        2         H     
1/13/2007   Saturday      2         W
1/14/2007   Sunday        2         W

我正在尝试在数据框中创建一个新列作为"freq_weekly"。

对于"wk_num"的每个值,此列的最后一个值"D"的值为"W",对于其他列

,此列的值为空白。 例如,1/5/2017的值为"W",2017 年 11 月 11 日的值为"W"。其他人将在其中空白。

请帮我解决这个问题。

想法是按neshiftcumsum为连续组创建辅助mask,然后仅过滤D行并通过Series.duplicatedkeep='last'获取最后一个值,然后按Series.reindex排除行:

m = df['freq_daily'].eq('D')
mask = m.ne(m.shift()).cumsum()[m].duplicated(keep='last').reindex(df.index, fill_value=True)

如果需要测试更多列中的重复项:

mask = (df.assign(m=m.ne(m.shift()).cumsum())[m]
.duplicated(['wk_num','freq_daily'],keep='last')
.reindex(df.index, fill_value=True))

因此,可以通过numpy.where创建新列:

df['freq_weekly'] = np.where(mask, '', 'W')
print (df)
date  day_of_wk  wk_num wkend_hol_ind freq_daily freq_weekly
0    1/1/2007     Monday       1             H        NaN            
1    1/2/2007    Tuesday       1             H        NaN            
2    1/3/2007  Wednesday       1           NaN          D            
3    1/4/2007   Thursday       1           NaN          D            
4    1/5/2007     Friday       1           NaN          D           W
5    1/6/2007   Saturday       1             W        NaN            
6    1/7/2007     Sunday       1             W        NaN            
7    1/8/2007     Monday       2           NaN          D            
8    1/9/2007    Tuesday       2           NaN          D            
9   1/10/2007  Wednesday       2           NaN          D            
10  1/11/2007   Thursday       2           NaN          D           W
11  1/12/2007     Friday       2             H        NaN            
12  1/13/2007   Saturday       2             W        NaN            
13  1/14/2007     Sunday       2             W        NaN            

最新更新