我已经设法接近了,因为我能够正确地总结每个小组的总数,我的问题是让总数出现在每个小组的末尾,下面是我的工作- (我使用Django,所以我使用queryset作为数据)
df = pd.DataFrame(list(
get_daily_transaction_object(value, SQLLIST, date).values('posgroupid',
'posid',
'cardscheme',
'transactionamount',
'transactiontype',
'currencycode')))
def f(x):
a = x['transactionamount'].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'])
grouped_df = df.groupby(['currencycode',
'posgroupid',
'posid',
'cardscheme']).apply(f)
subtotal = grouped_df.sum(level=[0, 1, 2]).assign(cardscheme='Total').set_index('cardscheme', append=True)
grouped_new = pd.concat([grouped_df, subtotal]).sort_index()
context = {'desc': 'Transaction Report',
'report': grouped_new.to_html(classes='white_space_df')
}
上面的计算是正确的,但将总数放在看似随机的位置,这在动态调整数据大小时会引起问题
看起来您正在将Total设置为cardscheme的实例,以便将其分组到cardscheme列下。然后将cardscheme设置为索引,最后对索引进行排序。因此,Total与其他cardscheme(如Visa卡、万事达卡)一起按字母顺序排序(作为索引)
您是否可以先对其他cardscheme项目进行排序(按索引排序),然后在不进一步对索引排序的情况下添加总计?仅举一个示例(未完全测试),将代码顺序更改为:
相关问题 更多 >
编程相关推荐