用月份和按列分组的熊猫时间序列重采样

时间:2019-04-13 09:49:23

标签: python pandas

如何使用月份和按一列分组并汇总另一列的平均值来重新采样日期索引。

数据框示例:

                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_namesum分组每个月的持续时间。

1 个答案:

答案 0 :(得分:1)

您可以reset_indexcleareddate字段设置为数据框中的一列。我将用month创建一个新列,然后您可以对此执行简单的groupby

df.reset_index(inplace=True)
df['month'] = df.cleareddate.dt.month
df.groupby(['month','bts_name']).agg('sum').duration

注意:

  1. 我假设索引的类型为datetime。如果不是这种情况,请在df.cleareddate = pd.to_datetime(df.cleareddate)行之后添加reset_index行。
  2. 请注意,两个不同年份中的月份将被分组为相同的月份。您还需要按年份分组吗?如果是这样,请为年份添加另一列,然后将该术语添加到您的groupby列中

编辑: 在与@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