首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python在dataframe中按类别汇总过去12个月的数据

使用python在dataframe中按类别汇总过去12个月的数据
EN

Stack Overflow用户
提问于 2018-06-07 03:36:49
回答 1查看 990关注 0票数 0

我正在尝试按类别创建过去12个月(不包括当前月份)的数据摘要。我已经用以下代码总结了前3个月,但这样做12个月似乎很麻烦。我想知道是否有更高效和有效的方法来动态切片过去12个月的数据。df1是我使用SQL查询从DB连接加载的完整数据集。我使用.drop()来切出不需要的数据列,只留下计数。

代码语言:javascript
复制
import pandas as pd
import datetime

df1.Start_Date = pd.DatetimeIndex(df1.Start_Date)

today = datetime.date.today()
currentfirst = today.replace(day=1)
thirdMonth = currentfirst - pd.offsets.MonthBegin(3)
secondMonth = currentfirst - pd.offsets.MonthBegin(2)
firstMonth = currentfirst - pd.offsets.MonthBegin(1)

fst_label = firstMonth.strftime('%B')
snd_label = secondMonth.strftime('%B')
thd_label = thirdMonth.strftime('%B')

def monthly_vol(df, label, start_date, end_date):
    """Slices df1 into previous months and sums the volume of each change class."""
    if start_date is not None:
        df = df1[df1.Start_Date >= start_date]
    if end_date is not None:
        df = df[df.Start_Date < end_date]
    df_count = df.groupby('Change Class').count().drop(['Start_Date', 'Risk Level', 'Change Coordinator', 'Change Coordinator Group'], axis=1)
    return df_count

fst_month = monthly_vol(df1, fst_label, firstMonth, currentfirst)
snd_month = monthly_vol(df1, snd_label, secondMonth, firstMonth)
thd_month = monthly_vol(df1, thd_label, thirdMonth, secondMonth)

def month_merge(df1, df2, df3):
    """Merges monthly dataframes together."""
    new_df = pd.merge(df1, df2, left_index=True, right_index=True).merge(df3, left_index=True, right_index=True)
    new_df.columns = [fst_label, snd_label, thd_label]
    print(new_df)
    return new_df

monthly_vol = month_merge(fst_month, snd_month, thd_month)

这将给出输出:

代码语言:javascript
复制
              May  April  March
Change Class                   
Emergency      36     36     32
Expedited      17     24     35
Normal        182    146    134
Standard      256    210    267

奖励问题:如果能得到同一数据帧中每个类别的总成交量的平均值,那就太好了。有点像这样:

代码语言:javascript
复制
              May  MayAVG  April  AprilAVG   March  MarchAVG
Change Class                   
Emergency      36   7.33   36     8.65       32     6.84
Expedited      17   3.46   24     5.77       35     7.48
Normal        182   37.07  146    35.10      134    28.63
Standard      256   52.14  10     50.48      267    57.05

任何帮助都将不胜感激!

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档