python - 如何使用 loc 在 Pandas 中使用多个索引将总和写入底行
问题描述
我有一个带有多个分组的 Pandas 表,我正在使用如下所示的 2 个索引示例 -
| |Transactions|Sales|Refund|Cashback|Total
|Index|Index|----------------------------------------
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
...etc
问题是,当我使用df.loc['Total']= df.sum()
is 时会产生以下结果 -
|Transactions|Sales|Refund|Cashback|Total
(one_,two_) |DATA_ |DATA |DATA_ |DATA_ |DATA_|
(one_,two_) |DATA_ |DATA |DATA_ |DATA_ |DATA_|
(one_,two_) |DATA_ |DATA |DATA_ |DATA_ |DATA_|
(one_,two_) |DATA_ |DATA |DATA_ |DATA_ |DATA_|
(one_,two_) |DATA_ |DATA |DATA_ |DATA_ |DATA_|
(one_,two_) |DATA_ |DATA |DATA_ |DATA_ |DATA_|
Total |SUM__ | | | |
我想要的输出如下:
| |Transactions|Sales|Refund|Cashback|Total
|Index|Index|----------------------------------------
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
one_ | two_|DATA_ |DATA|DATA_ |DATA_ |DATA_|
|TOTAL|SUM |SUM |SUM |SUM |SUM |
这是我当前的代码,我必须产生上述结果 -
df = pd.DataFrame(transaction_object)
# Check if dataframe empty
if df.empty:
messages.error(request, 'No Data Found')
context['desc'] = 'Summary Reports'
return render(request, 'console/reports.html', context=context)
df.settlementhistoryid = df.settlementhistoryid.replace(settlement_date)
def format(x):
return "{:.2f}".format(x / 100)
def card_scheme_rules(x):
a = x['transactionsequencenumber'].nunique()
b = x[df['transactiontype'] == 1]['transactionamount'].sum()
c = x[df['transactiontype'] == 4]['transactionamount'].sum()
d = x[df['transactiontype'] == 3]['transactionamount'].sum()
e = x['transactionamount'].sum()
return pd.Series([a, b, c, d, e], index=['transactions', 'sales', 'refund', 'cashback', 'Total'])
df.settlementhistoryid = pd.to_datetime(df.settlementhistoryid).dt.strftime('%d-%m-%Y')
df.transactiondate = pd.to_datetime(df.transactiondate).dt.strftime('%d-%m-%Y')
grouped_df = df.groupby(['settlementhistoryid', 'transactiondate']).apply(card_scheme_rules)
grouped_df['sales'] = grouped_df['sales'].apply(format)
grouped_df['refund'] = grouped_df['refund'].apply(format)
grouped_df['cashback'] = grouped_df['cashback'].apply(format)
grouped_df['Total'] = grouped_df['Total'].apply(format)
grouped_df.loc['Total'] = pd.Series(grouped_df['transactions'].sum(), index=['transactions'])
card_scheme_html_class = str(grouped_df.to_html().replace('class="dataframe"',
'class="display" style="width:100%;"'))
是否有其他值可以通过 loc[] 传递?
解决方案
您缺少 index_1 的值,您可以尝试:
df.loc[('', 'Total'), :] = df.sum(axis=0)
推荐阅读
- python - Django - 使用 3rd 方 API 以及分页
- wordpress - Wordpress / Woocommerce 我的帐户子页面
- excel - 如何让 VBA 函数引用它旁边列上的单元格?
- spring-boot - 自定义 Spring 安全链未被拾取
- python - 按照 Pandas Dataframe 中的模式转换字符串列的内容
- python - Jupyter Notebooks Spark RDD 拆分功能——去掉括号
- java - 将 Android 应用程序连接到在 localhost 上运行的服务器
- angular - 我需要在 CI 作业中缓存什么以避免每次 ngcc 重新编译?
- batch-file - 在批处理 cmd 文件中使用 set 更新变量值
- python - matplotlib中椭圆的坐标