您能建议一下如何添加包含月份总和的季节栏吗?

part 2024-03-01 00:00:00 2024-04-01 00:00:00 2024-05-01 00:00:00 2024-06-01 00:00:00 2024-07-01 00:00:00 2024-08-01 00:00:00 2024-09-01 00:00:00
part1 6 8 2 3 0 5 5
part2 7 1 3 8 9 4 10
part3 10 7 4 5 6 10 0
part4 6 9 3 0 10 9 10
part5 2 1 10 8 7 3 3
part6 1 0 4 1 1 7 8

我try 得到这样的输出:

part 2024-03-01 00:00:00 Q1'24 2024-04-01 00:00:00 2024-05-01 00:00:00 2024-06-01 00:00:00 Q2'24 2024-07-01 00:00:00 2024-08-01 00:00:00 2024-09-01 00:00:00 Q3'24
part1 6 6 8 2 3 13 0 5 5 10
part2 7 7 1 3 8 12 9 4 10 23
part3 10 10 7 4 5 16 6 10 0 16
part4 6 6 9 3 0 12 10 9 10 29
part5 2 2 1 10 8 19 7 3 3 13
part6 1 1 0 4 1 5 1 7 8 16

raw data

推荐答案

您可以将列转换为季度期间,对于小计,按DatetimeIndex.to_period转换为季度期间;对于正确的顺序,按concat转换为原始期间,按DataFrame.sort_index转换为季度期间:

df.columns = pd.to_datetime(df.columns)
out = (pd.concat([df,
                 df.groupby(df.columns.to_period('Q'), axis=1).sum()],
                 axis=1)
         .sort_index(axis=1, key=lambda x: pd.PeriodIndex(x, 'Q')))


out.columns = [x.strftime("Q%q'%y") if isinstance(x, pd.Period) 
               else x for x in out.columns]

print (out)
       2024-03-01 00:00:00  Q1'24  2024-04-01 00:00:00  2024-05-01 00:00:00  \
part                                                                          
part1                    6      6                    8                    2   
part2                    7      7                    1                    3   
part3                   10     10                    7                    4   
part4                    6      6                    9                    3   
part5                    2      2                    1                   10   
part6                    1      1                    0                    4   

       2024-06-01 00:00:00  Q2'24  2024-07-01 00:00:00  2024-08-01 00:00:00  \
part                                                                          
part1                    3     13                    0                    5   
part2                    8     12                    9                    4   
part3                    5     16                    6                   10   
part4                    0     12                   10                    9   
part5                    8     19                    7                    3   
part6                    1      5                    1                    7   

       2024-09-01 00:00:00  Q3'24  
part                               
part1                    5     10  
part2                   10     23  
part3                    0     16  
part4                   10     29  
part5                    3     13  
part6                    8     16  

好点—在上一个版本的pandas(2.1.4+)需要转置,谢谢你@ nick:

df.columns = pd.to_datetime(df.columns)
df = df.T

out = (pd.concat([df,
                 df.groupby(df.index.to_period('Q')).sum()]).T
          .sort_index(axis=1, key=lambda x: pd.PeriodIndex(x, 'Q'))
         )


out.columns = [x.strftime("Q%q'%y") 
               if isinstance(x, pd.Period) 
               else x for x in out.columns]

print (out)

       2024-03-01 00:00:00  Q1'24  2024-04-01 00:00:00  2024-05-01 00:00:00  \
part                                                                          
part1                    6      6                    8                    2   
part2                    7      7                    1                    3   
part3                   10     10                    7                    4   
part4                    6      6                    9                    3   
part5                    2      2                    1                   10   
part6                    1      1                    0                    4   

       2024-06-01 00:00:00  Q2'24  2024-07-01 00:00:00  2024-08-01 00:00:00  \
part                                                                          
part1                    3     13                    0                    5   
part2                    8     12                    9                    4   
part3                    5     16                    6                   10   
part4                    0     12                   10                    9   
part5                    8     19                    7                    3   
part6                    1      5                    1                    7   

       2024-09-01 00:00:00  Q3'24  
part                               
part1                    5     10  
part2                   10     23  
part3                    0     16  
part4                   10     29  
part5                    3     13  
part6                    8     16 

Python相关问答推荐

具有多个选项的计数_匹配

使用FASTCGI在IIS上运行Django频道

试图找到Python方法来部分填充numpy数组

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

在Python中管理打开对话框

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

"使用odbc_connect(raw)连接字符串登录失败;可用于pyodbc"

对所有子图应用相同的轴格式

Pre—Commit MyPy无法禁用非错误消息

用砂箱开发Web统计分析

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

从Windows Python脚本在WSL上运行Linux应用程序

在Admin中显示从ManyToMany通过模型的筛选结果

比Pandas 更好的 Select

Tensorflow tokenizer问题.num_words到底做了什么?

Matplotlib中的曲线箭头样式

如何在Polars中创建条件增量列?

Pandas:根据相邻行之间的差异过滤数据帧

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?

跨两个数据帧收集非索引列上的公共组