我有以下示例数据框:
Date count_row Work_Type
2018-07-31 00:00:00 1 logpage
2018-08-01 00:00:00 1 logpage
2018-08-01 00:00:00 1 logpage
2018-08-01 00:00:00 1 logpage
2018-08-01 00:00:00 1 logpage
2018-09-02 00:00:00 1 logpage
2018-09-02 00:00:00 1 logpage
2018-09-03 00:00:00 1 logpage
2018-09-04 00:00:00 1 logpage
2018-09-04 00:00:00 1 logpage
2018-09-06 00:00:00 1 logpage
2018-09-07 00:00:00 1 logpage
2018-09-08 00:00:00 1 logpage
我想将其分解为几周,并计算该周的出现次数。具体来说,我认为一周的开始是星期一,一周的结束是星期日。
例如,9/3/2018是星期一(或我认为是一周的开始)。所以从那个星期一到下一个星期日,我算的都是9/3/2018。
以下是我正在寻找的数据框结果:
Beginning of Week Date (Mon) count
7/30/2018 5
8/27/2018 2
9/3/2018 6
我尝试了以下代码:
df.set_index('Date', inplace=True)
df.sort_index(inplace=True)
def take_first(array_like):
return array_like[0]
output = df.resample('W',
how={'Date': take_first,
'count_row': 'sum'},
loffset=pd.offsets.timedelta(days=-6))
这是我得到的错误:
IndexError: index out of bounds
答案 0 :(得分:2)
一点时间算术+ value_counts
应该可以解决这个问题:
(df['Date'].sub(pd.to_timedelta(df['Date'].dt.dayofweek, unit='D'))
.value_counts(sort=False))
2018-07-30 5
2018-08-27 2
2018-09-03 6
Name: Date, dtype: int64
答案 1 :(得分:1)
您可以使用resample
:
df.resample('W-Mon', on='Date', label='left', closed='left').sum().query('count_row > 0')
输出:
count_row
Date
2018-07-30 5
2018-08-27 2
2018-09-03 6