【发布时间】:2018-06-06 19:36:48
【问题描述】:
我正在尝试按类别创建过去 12 个月(不包括当月)的数据摘要。我用下面的代码总结了前3个月,但是这样做了12个月似乎很麻烦。我想知道在过去 12 个月中是否有更有效的动态切片数据的方法。 df1 是我使用 SQL 查询从数据库连接加载的完整数据集。我使用 .drop() 来切掉不需要的数据列,只留下计数。
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)
这将给出输出:
May April March
Change Class
Emergency 36 36 32
Expedited 17 24 35
Normal 182 146 134
Standard 256 210 267
奖金问题: 在同一数据框中获得每个类别的总体积平均值会很好。有点像这样:
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
任何帮助将不胜感激!
【问题讨论】:
-
您的问题是什么?还提供minimal reproducible example 而不是整个程序。您可以提供输入数据、预期输出和为您提供当前输出的最少代码。
-
datetime具有可让您轻松计算月份的属性。 IE。df.date_col.dt.month会给你一个月。您可以按此分组并轻松计算平均值、总计、大小等内容。等 -
我的问题是'编译与上述类似的输出的最佳方法是什么,而不是为每个月创建一个
firstMonth = currentfirst - pd.offsets.MonthBegin(1)变量并将其传递给函数。
标签: python pandas date datetime group-by