Pandas 将按类别小计的行添加到我的数据框

Pandas 将按类别小计的行添加到我的数据框,pandas,row,subtotal,Pandas,Row,Subtotal,我使用groupby创建了一个新的聚合数据框架,但在每个类别下添加小计行时遇到了问题 我曾经尝试过使用pd.groupby和pivottable并更改索引,但是我没有按照我想要的方式表示数据 为每个“客户”创建“美元余额”小计,但将其添加为列: 创建一个groupby并与我的原始表合并会得到相同的结果 我希望如何显示我的数据: 我想添加一个小计行,每个客户端ID组对应的agg 提前感谢您提供关于如何像这样呈现我的数据的任何建议 您可以使用groupby访问每个组并添加小计行: su

我使用groupby创建了一个新的聚合数据框架,但在每个类别下添加小计行时遇到了问题

我曾经尝试过使用pd.groupby和pivottable并更改索引,但是我没有按照我想要的方式表示数据

  • 为每个“客户”创建“美元余额”小计,但将其添加为列:
  • 创建一个groupby并与我的原始表合并会得到相同的结果
  • 我希望如何显示我的数据:
我想添加一个小计行,每个客户端ID组对应的agg


提前感谢您提供关于如何像这样呈现我的数据的任何建议

您可以使用
groupby
访问每个组并添加小计行:


sum\u res=df.groupby(['CLient ID'],as\u index=False)['USD\u Balance'].sum()

sum\u res['grand\u total']='grand total'

df.sort_值(按=['CLient ID'],升序=[True],就地=True)


排序后将两列从原始数据帧中分离出来
res=df[['客户ID','美元余额]]

final\u res=pd.concat([res,sum\u res])

final\u res=final\u res.sort\u值(按=['CLient ID','grand\u total',升序=[True,True],无位置='first')

final_res['CLient ID']=np.where(final_res['grand_total'].isnull(),
最终结果[“客户ID”],
最终结果[总计])


final\u res.drop(['grand\u total',axis=1,inplace=True)

你可以用稍微不同的方式来做吗

dftotal = df.groupby('CLient ID')['USD_Balance'].sum().reset_index()
dftotal['CLient ID'] = 'SubTotal'
pd.concat([df, dftotal])
输出:

  CLient ID  USD_Balance
0         1            2
1         1            2
2         1            2
0  SubTotal            6

我想这是关于
groupby
的,所以与dup答案不完全相同。OP只是没有提供更多的
客户端ID
@cs95@Erfan啊,对。我确信这是某种东西的复制品。如果你发现什么,请告诉我。现在将重新开放。我有一个答案,介意我发布吗@cs95@Erfan当然可以,投票结果是正确的。您欢迎@CJ123批准答案,这样更多的人可以从解决方案中受益
|---------------------|------------------|
|      Client ID      |    USD_Balance   |
|---------------------|------------------|
|          1          |         2        |
|---------------------|------------------|
|          1          |         2        |
|---------------------|------------------|
|          1          |         2        |
|---------------------|------------------|
|        SubTotal     |         6        |
|---------------------|------------------|
dfs = []

for _, d in df.groupby('CLient ID', as_index=False):
    d.loc['Total', 'USD_Balance'] = df['USD_Balance'].sum()
    dfs.append(d)

df_final = pd.concat(dfs, ignore_index=True)
   CLient ID  USD_Balance
0        1.0          2.0
1        1.0          2.0
2        1.0          2.0
3        NaN          6.0
dftotal = df.groupby('CLient ID')['USD_Balance'].sum().reset_index()
dftotal['CLient ID'] = 'SubTotal'
pd.concat([df, dftotal])
  CLient ID  USD_Balance
0         1            2
1         1            2
2         1            2
0  SubTotal            6