如何使用月份和按一列分组并汇总另一列的平均值来重新采样日期索引。
数据框示例:
bts_name duration
cleareddate
2019-01-19 1002_NUc_Marathalli 95
2019-01-21 1002_NUc_Marathalli 188
2019-02-11 1002_NUc_Marathalli 1332
2019-04-12 1002_NUc_Marathalli 940
2019-01-11 1003_IU2_Munnekolalu 73
我正在尝试按频率月份和bts_name
和sum
分组每个月的持续时间。
答案 0 :(得分:1)
您可以reset_index
将cleareddate
字段设置为数据框中的一列。我将用month创建一个新列,然后您可以对此执行简单的groupby
。
df.reset_index(inplace=True)
df['month'] = df.cleareddate.dt.month
df.groupby(['month','bts_name']).agg('sum').duration
注意:
df.cleareddate = pd.to_datetime(df.cleareddate)
行之后添加reset_index
行。 编辑: 在与@sriman进行评论讨论之后,我介绍了另一种使用pandas resample方法实现上述目标的方法。
# your data
df = pd.DataFrame({
'bts_name': ['1002_NUc_Marathalli','1002_NUc_Marathalli',
'1002_NUc_Marathalli','1002_NUc_Marathalli',
'1003_IU2_Munnekolalu'],
'duration': [95,188,1332,940,73]
}, index=pd.to_datetime(['2019-01-19','2019-01-21',
'2019-02-11','2019-04-12','2019-01-11']))
# solution
def resample(group):
return group.resample('M').sum()
result = df.groupby('bts_name').apply(resample)
# result
print(result)
duration
bts_name
1002_NUc_Marathalli 2019-01-31 283
2019-02-28 1332
2019-03-31 0
2019-04-30 940
1003_IU2_Munnekolalu 2019-01-31 73