首页 > 解决方案 > Pandas:按双月日期字段分组

问题描述

我正在尝试按每月两次的医院工作人员工作时间分组。我每天都有原始数据,如下所示。

date       hourse_spent emp_id  
9/11/2016     8          1  
15/11/2016    8          1  
22/11/2016    8          2  
23/11/2016    8          1

我想分组的方式是。

cycle                 hourse_spent      emp_id   
1/11/2016-15/11/2016      16                 1
16/11/2016-31/11/2016      8                 2
16/11/2016-31/11/2016      8                 1

我正在尝试对熊猫中的石斑鱼和频率做同样的事情,如下所示。

data.set_index('date',inplace=True)
print data.head()
dt = data.groupby(['emp_id', pd.Grouper(key='date', freq='MS')])['hours_spent'].sum().reset_index().sort_values('date')

#df.resample('10d').mean().interpolate(method='linear',axis=0)
print dt.resample('SMS').sum()

我也试过resampling

df1 = dt.resample('MS', loffset=pd.Timedelta(15, 'd')).sum()
data.set_index('date',inplace=True)
df1 = data.resample('MS', loffset=pd.Timedelta(15, 'd')).sum()

但这给出了 15 天间隔的数据,而不是 1 到 15 和 15 到 31。

请让我知道我在这里做错了什么。

标签: pythonpandas

解决方案


你快到。这会做到 -

dt = df.groupby(['emp_id', pd.Grouper(key='date', freq='SM')])['hours_spent'].sum().reset_index().sort_values('date')

emp_id  date    hours_spent
1   2016-10-31  8
1   2016-11-15  16
2   2016-11-15  8

thefreq='SM'是半月的概念,它将使用15th每个月的 the 和最后一天


推荐阅读