Python 调整数据帧组的最后一行

Python 调整数据帧组的最后一行,python,pandas,numpy,Python,Pandas,Numpy,我有一个每日级别的数据列表,我已将每个独特的公司/集团分组汇总到季度级别。然后我计算同比增长 但是,对于当前季度,我希望调整同比计算,使其仅考虑到季度至今的期间。例如,假设数据是截至2016年11月4日的最新数据,且该季度从2016年10月1日开始至2016年12月31日结束,我想计算2016年10月1日至2016年11月4日和2015年10月1日至2015年11月4日之间的交易增长 假设数据是截至2016年11月4日的最新数据,我如何计算我仅有部分数据的最近一个季度的同比增长 每日数据: df

我有一个每日级别的数据列表,我已将每个独特的公司/集团分组汇总到季度级别。然后我计算同比增长

但是,对于当前季度,我希望调整同比计算,使其仅考虑到季度至今的期间。例如,假设数据是截至2016年11月4日的最新数据,且该季度从2016年10月1日开始至2016年12月31日结束,我想计算2016年10月1日至2016年11月4日和2015年10月1日至2015年11月4日之间的交易增长

假设数据是截至2016年11月4日的最新数据,我如何计算我仅有部分数据的最近一个季度的同比增长

每日数据: df=

季度数据:df2=

Company Group Period  EndDate      Value Pct_Growth_YoY
A       X     2014Q1  3/31/2015    9     NaN
A       X     2014Q2  6/30/2015    6     NaN
A       X     2014Q3  9/30/2015    3     NaN
A       X     2014Q4  12/31/2015   9     NaN
A       X     2015Q1  3/31/2015    5     -0.44
A       X     2015Q2  6/30/2015    8     0.33
A       X     2015Q3  9/30/2015    6     1.0
A       X     2015Q4  12/31/2015   4     -0.55
A       X     2016Q1  3/31/2016    7     0.40
A       X     2016Q2  6/30/2016    6     -0.25
A       X     2016Q3  9/30/2016    9     0.50
A       X     2016Q4  12/31/2016   3     -0.25
A       XX    2015Q1  3/31/2015    4     NaN
A       XX    2015Q2  6/30/2015    6     NaN
A       XX    2015Q3  9/30/2015    6     NaN
A       XX    2015Q4  12/31/2015   8     NaN
A       XX    2016Q1  3/31/2016    9     1.25
A       XX    2016Q2  6/30/2016    4     -0.33
A       XX    2016Q3  9/30/2016    5     -0.16
A       XX    2016Q4  12/31/2016   2     -0.75
我想计算每个独特公司/集团组合的季度迄今同比增长,而不是将2016年第四季度的部分数据与2015年第四季度的全部数据进行比较

我希望的结果是:

结果=

Company Group Period  EndDate      Value Pct_Growth_YoY
A       X     2014Q1  3/31/2015    9     NaN
A       X     2014Q2  6/30/2015    6     NaN
A       X     2014Q3  9/30/2015    3     NaN
A       X     2014Q4  12/31/2015   9     NaN
A       X     2015Q1  3/31/2015    5     -0.44
A       X     2015Q2  6/30/2015    8     0.33
A       X     2015Q3  9/30/2015    6     1.0
A       X     2015Q4  12/31/2015   4     -0.55
A       X     2016Q1  3/31/2016    7     0.40
A       X     2016Q2  6/30/2016    6     -0.25
A       X     2016Q3  9/30/2016    9     0.50
A       X     2016Q4  12/31/2016   3     0.50
A       XX    2015Q1  3/31/2015    4     NaN
A       XX    2015Q2  6/30/2015    6     NaN
A       XX    2015Q3  9/30/2015    6     NaN
A       XX    2015Q4  12/31/2015   8     NaN
A       XX    2016Q1  3/31/2016    9     1.25
A       XX    2016Q2  6/30/2016    4     -0.33
A       XX    2016Q3  9/30/2016    5     -0.16
A       XX    2016Q4  12/31/2016   2     -0.66

考虑在运行groupby聚合后更新select行。选择行将是每个公司和组分组中的最大期间。计算会过滤掉一年前发生在今天时间点之后的日期

但是,首先,将日期转换为datetime类型。以下将保留以下范围内的行:2015年1月1日-2015年11月5日,2016年1月1日-今天


你是如何获得季度数据的?您的代码在哪里执行此操作?@Parfait我有一个带有季度数据周期和QuarterEndDate的数据帧。然后,我将其与每日数据合并,在“公司”、“集团”和“期间”列中添加“期间”列和“组”。但为什么最后一行是唯一缺失的?我对问题进行了编辑,以使其更清楚。没有遗漏,但同比增长率是不正确的。该数据截止到2016年11月4日,因此当对2016年第四季度的数据进行汇总时,仅包括2016年1月10日至2016年4月11日的数据。然而,2015年第四季度有2015年1月10日至2015年12月31日整个季度的数据,因此当我计算增长时,它将部分季度与整个季度进行比较。相反,我想计算同一时期的数据:2016年1月10日至2016年4月11日,与2015年1月10日至2015年4月11日进行比较。你能发布你的groupby pandas代码吗?这会为2015年第四季度产生不正确的值。此外,如果我有超过两年的时间,它将为每个第四季度产生不正确的值和Pct年增长率。对于这里发布的数据,我得到了2016年第四季度的-0.66667,运行您的准确groupby。将删除所有十二月值。因此,2015年12月的2将被删除。当我按照您的代码分组时,2015年第四季度X组的df2.值为2,应该为4。值列应保持不变。我已更新了问题,将2014年的数据包括在内,以表明使用此方法计算的2015年第四季度Pct_年增长率是不正确的。您是否还需要将2014年第四季度的值调整为11月之前的值?如果是这样,您需要在我的回答中使用第二种方法,而不是第一种方法,这种方法在数据集中适用于所有年份。
Company Group Period  EndDate      Value Pct_Growth_YoY
A       X     2014Q1  3/31/2015    9     NaN
A       X     2014Q2  6/30/2015    6     NaN
A       X     2014Q3  9/30/2015    3     NaN
A       X     2014Q4  12/31/2015   9     NaN
A       X     2015Q1  3/31/2015    5     -0.44
A       X     2015Q2  6/30/2015    8     0.33
A       X     2015Q3  9/30/2015    6     1.0
A       X     2015Q4  12/31/2015   4     -0.55
A       X     2016Q1  3/31/2016    7     0.40
A       X     2016Q2  6/30/2016    6     -0.25
A       X     2016Q3  9/30/2016    9     0.50
A       X     2016Q4  12/31/2016   3     0.50
A       XX    2015Q1  3/31/2015    4     NaN
A       XX    2015Q2  6/30/2015    6     NaN
A       XX    2015Q3  9/30/2015    6     NaN
A       XX    2015Q4  12/31/2015   8     NaN
A       XX    2016Q1  3/31/2016    9     1.25
A       XX    2016Q2  6/30/2016    4     -0.33
A       XX    2016Q3  9/30/2016    5     -0.16
A       XX    2016Q4  12/31/2016   2     -0.66
import datetime as dt 
...

df1['Date'] = pd.to_datetime(df1['Date'], format="%m/%d/%Y")   

# ORIGINAL GROUP BY (NO CHANGE)
df2 = df.groupby(['Company','Group','Period']).sum().reset_index()
df2['Pct_Growth_YoY'] = df2.sort_values('Period').groupby(['Company','Group'])\
                           .pct_change(4)

# LOCATE MAX QUARTER GROUP INDICES    
maxgrps = df2.groupby(['Company','Group'])['Period']\
             .apply(lambda row: row[row==row.max()].index.values[0])\
             .reset_index()['Period'].values.tolist()

# UPDATE ONLY MAX QUARTER GROUP ROWS
df2.ix[maxgrps, 'Pct_Growth_YoY'] = \
                     df[(df['Date'] <= (dt.datetime.today() - dt.timedelta(days=365.25))) |
                        (df['Date'] >= dt.datetime(dt.datetime.today().year, 1, 1))]\
                        .groupby(['Company','Group','Period']).sum().reset_index()\
                        .groupby(['Company','Group']).pct_change(4)['Value']\
                                                     .iloc[maxgrps].values