我有下表,其中Date是索引列:

Date ColA ColB
2021-01-01 10 40
2021-01-02 20 15
2022-01-01 10 40
2022-01-02 20 15

我想添加行小计以显示年度合计:

Date ColA ColB
2021-01-01 10 40
2021-01-02 20 15
2021 Subtotal 30 55
2022-01-02 20 15
2021-01-02 20 15
2022 Subtotal 40 30

我try 了以下代码:

df.groupby(level='Date').transform("sum")

However I am getting the following error:
DateFormatError: invalid date '2022 Subtotal'

有没有其他方法可以达到类似的效果?

推荐答案

您可以使用:

# grouper for years
# convert to datetime and extract year
# convert to string and add ' Subtotal'
group = (pd.to_datetime(df['Date']).dt.year
         .astype(str)
         .add(' Subtotal')
         )

# perform groupby.sum using the above grouper
# concatenation with original data
# sorting by year to move the subtotals below their respective data
out = (pd.concat(
       [df,
        df.groupby(group)
          .sum().reset_index()])
         .sort_values(by='Date',
                      key=lambda x: x.str.extract('(\d+)', expand=False),
                      kind='stable'
                      )
)

输出:

            Date  ColA  ColB
0     2021-01-01    10    40
1     2021-01-02    20    15
0  2021 Subtotal    30    55
2     2022-01-01    10    40
3     2022-01-02    20    15
1  2022 Subtotal    30    55

Python相关问答推荐

TARete错误:类型对象任务没有属性模型'

如何删除索引过go 的lexsort深度可能会影响性能?' &>

从收件箱中的列中删除html格式

如何找到满足各组口罩条件的第一行?

log 1 p numpy的意外行为

Python键入协议默认值

使用Python更新字典中的值

Odoo 16使用NTFS使字段只读

转换为浮点,pandas字符串列,混合千和十进制分隔符

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

如何在达到end_time时自动将状态字段从1更改为0

如何排除prefecture_related中查询集为空的实例?

搜索按钮不工作,Python tkinter

没有内置pip模块的Python3.11--S在做什么?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

我什么时候应该使用帆布和标签?

遍历列表列表,然后创建数据帧

如果列包含空值,则PANAS查询不起作用

为什么这个正则表达式没有捕获最后一次输入?