Pandas:基于多层列分组聚合生成含Freq新序列的方法问询
解决方法
直接针对你的多层列DataFrame,或者从原始数据一步到位,都可以实现需求:
方法一:基于已生成的pivot_table结果处理
假设你已生成的多层列DataFrame名为pivot_df:
按Band和Channel分组求和slot功率
利用列的多层索引,指定按前两层(Band、Channel)分组,对每个TimeStamp下的对应值求和:sum_df = pivot_df.groupby(level=[0, 1], axis=1).sum()这里
level=[0,1]对应列多层索引的Band(第0层)和Channel(第1层),axis=1表示按列维度分组聚合。计算Freq并替换列名
遍历列的(Band, Channel)元组,计算对应的freq值,替换为新列名:sum_df.columns = [1200 + (band - 1) + channel / 12 for band, channel in sum_df.columns]
方法二:从原始DataFrame直接生成结果(更高效)
跳过中间的pivot_table步骤,直接对原始数据分组求和再转换格式:
# 假设原始DataFrame名为raw_df result = raw_df.groupby(['TimeStamp', 'Band', 'Channel'])['watts'].sum().unstack() # 替换列名为计算后的Freq result.columns = result.columns.map(lambda x: 1200 + (x[0]-1) + x[1]/12)
为什么之前单层级groupby失败?
因为你的列是多层索引结构,单层级分组仅针对Band或Channel其中一层,没有同时将两者作为分组依据,自然无法得到同一Band+Channel下的slot总和。必须指定同时按Band和Channel两层列索引分组,才能得到正确结果。
内容的提问来源于stack exchange,提问作者earnric
相关产品推荐
相关产品推荐

