【发布时间】:2019-10-27 05:49:08
【问题描述】:
我有一个pivot_table 生成的DataFrame,它的行有一个索引,它的列有一个MultiIndex。 MultiIndex 的顶层是我正在运行计算的数据的名称,第二层是该数据的日期。这些值是这些计算的结果。它看起来像这样:
Imgur link - my reputation not high enough to post inline images
我正在尝试按季度(例如 Q42018)对这些数据进行分组,而不是每天(数据的本机格式)。
我发现 this 帖子使用 PeriodIndex 和 GroupBy 将日期索引转换为季度/年索引,非常优雅且最有意义。
问题在于,此解决方案适用于只有单个索引列的数据框。我在尝试这样做时遇到了问题,因为我的列是多索引,我不知道如何让它工作。到目前为止,这是我的尝试:
bt = cleaned2018_df.pivot_table(index='Broker',
values=['Interaction Id','Net Points'],
columns='Date',
aggfunc={'Interaction Id':pd.Series.nunique,
'Net Points':np.sum},
fill_value=0)
pidx = pd.PeriodIndex(bt.columns.levels[1], freq='Q')
broker_qtr_totals = bt.groupby(pidx, axis=1, level=1).sum()
如您所见,我正在获取包含所有日期的MultiIndex 的第二层,并通过PeriodIndex 函数运行它以获取季度索引。然后我将 PeriodIndex 传递给 groupby,并告诉它对列和日期所在的第二层进行操作。
这将返回Grouper and axis must be same length 的ValueError 响应。我知道原因是因为我传递给 GroupBy 的 pidx 值的长度为 x,而数据帧的列轴长度为 2x(因为多索引的第一级有 2 个值)。
我只是想知道如何正确地将其应用于整个索引。我似乎无法从语法上弄清楚,所以我想依靠社区的专业知识来看看是否有人可以帮助我。
如果我的解释不清楚,我很乐意进一步澄清。提前谢谢你。
【问题讨论】:
标签: python pandas dataframe pivot-table pandas-groupby