如何使用 groupby 调整 pandas 中的小计列?

Posted

技术标签:

【中文标题】如何使用 groupby 调整 pandas 中的小计列?【英文标题】:how to adjust subtotal columns in pandas using grouby? 【发布时间】:2021-04-26 08:32:51 【问题描述】:

我正在使用数据框连接将数据框导出到 Excel。

但是,在加入数据框之后, 使用groupby计算小计时,执行下图。

索引列中有一个“小计”字样。

enter image description here

有什么办法可以把它移到代码列中,并对索引进行排序?

enter image description here

这里代码:

    def subtotal(df__, str):

        container = []


        for key, group in df__.groupby(['key']):
            group.loc['subtotal'] = group[['quantity', 'quantity2', 'quantity3']].sum()
            container.append(group)


        df_subtotal = pd.concat(container)
        df_subtotal.loc['GrandTotal'] = df__[['quantity', 'quantity2', 'quantity3']].sum()

        print(df_subtotal)
        return (df_subtotal.to_excel(writer, sheet_name=str))

【问题讨论】:

【参考方案1】:

使用np.where()code 列中的NaN 填充为df.index 中的值。然后给df.index分配一个新的索引数组。

import numpy as np

df['code']  = np.where(df['code'].isna(), df.index, df['code'])
df.index = np.arange(1, len(df) + 1)
print(df)

          code  key    product  quntity1  quntity2   quntity3
1      cs01767    a    apple-a        10          0      10.0
2     Subtotal  NaN        NaN        10          0      10.0
3       cs0000    b  bannana-a        50         10      40.0
4       cs0000    b  bannana-b         0          0       0.0
5       cs0000    b  bannana-c         0          0       0.0
6       cs0000    b  bannana-d        80         20      60.0
7       cs0000    b  bannana-e         0          0       0.0
8      cs01048    b  bannana-f         0          0       NaN
9      cs01048    b  bannana-g         0          0       0.0
10    Subtotal  NaN        NaN       130         30     100.0
11     cs99999    c    melon-a        50         10      40.0
12     cs99999    c    melon-b        20         20       0.0
13     cs01188    c    melon-c        10          0      10.0
14    Subtotal  NaN        NaN        80         30      50.0
15  GrandTotal  NaN        NaN       220         60     160.0

【讨论】:

以上是关于如何使用 groupby 调整 pandas 中的小计列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pandas 中使用过滤条件和 groupby

如何使用 pandas groupby 聚合、组合数据框

Python Pandas 如何将 groupby 操作结果分配回父数据框中的列?

pandas如何使用groupby [duplicate]将NaN值替换为平均值

数据分析—Pandas 中的分组聚合Groupby 高阶操作

使用 pandas 在数据帧上执行 groupby,按计数排序并获取 python 中的前 2 个计数