我使用groupby创建了一个新的聚合数据框,但在每个类别下添加小计行时遇到了问题。
我尝试使用pd.groupby和ivottable并更改索引,但是我无法按需要表示数据。
df_balance['Subtotal'] = df_balance.groupby('Client')['USD_Balance'].transform('sum')
+----------+-------------+------------+
|CLient ID | USD_Balance | Subtotal |
+----------+---------+------------+----
| 1 | 2 | 6 |
| 1 | 2 | 6 |
| 1 | 2 | 6 |
+----------+-------------+------------+
|---------------------|------------------|
| Client ID | USD_Balance |
|---------------------|------------------|
| 1 | 2 |
|---------------------|------------------|
| 1 | 2 |
|---------------------|------------------|
| 1 | 2 |
|---------------------|------------------|
| SubTotal | 6 |
|---------------------|------------------|
我想添加一个“小计”行,并为每个“客户ID”组添加相应的agg。
在此先感谢您提供有关如何显示我的数据的任何提示!
答案 0 :(得分:1)
您可以使用groupby
并访问每个组并添加小计行:
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
答案 1 :(得分:0)
sum_res= df.groupby(['CLient ID'],as_index=False)['USD_Balance'].sum()
sum_res['grand_total'] ='Grand Total'
df.sort_values(by=['CLient ID'],ascending=[True],inplace=True)
排序后,将两列与原始数据框分开
res = df[['CLient ID','USD_Balance']]
final_res = pd.concat([res,sum_res])
final_res = final_res.sort_values(by=['CLient ID','grand_total'],ascending=[True,True],na_position='first')
final_res['CLient ID'] =np.where(final_res['grand_total'].isnull(),
final_res['CLient ID'],
final_res['grand_total'])
final_res.drop(['grand_total'],axis=1,inplace=True)
答案 2 :(得分: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