我正在尝试格式化来自外部源的一些数据并进行一些排序和分组。以下是我当前正在使用的片段。我正在尝试进行排序和分组。
pmtAccount = []
pmtAmount = []
for payment in payments_sent:
print ("{} {:>15}".format(payment['to'], payment['amount']))
pmtAmount.append(payment['amount'])
pmtAccount.append(payment['to'])
#-- Attempt to summarize output
df = pd.DataFrame(list(zip(pmtAccount, pmtAmount)), columns =['To', 'Amount'])
result = df.groupby('To')['Amount'].agg(['count','sum']).reset_index()
result['count'] = result['count'].astype(str) + ' Transactions'
print(result)
当前输出:
#-- Output of the line print ("{} {:>15}".format(payment['to'], payment['amount']))
199SJFW1K 100.0000000
ABC123ABC 100.0000000
ABC123ABC 50.0000000
ABC123ABC 300.0000000
123ABC123 200.0000000
123ABC123 50.0000000
123ABC123 100.0000000
ABC123ABC 300.0000000
ABC123ABC 250.0000000
XYXY12XYX 250.0000000
XYXY12XYX 500.0000000
1OPR12DRT 41.0000000
KSJDHW812 0.1900000
#--
To count sum
0 ABC123ABC ... 5 Transactions 100.0000000 50.0000000 300.0000000 300.0000000250...
1 XYXY12XYX ... 2 Transactions 250.0000000500.0000000
2 KSJDHW812 ... 1 Transactions 0.1900000
3 1OPR12DRT ... 1 Transactions 41.0000000
4 123ABC123 ... 3 Transactions 200.000000050.0000000100.0000000
5 199SJFW1K ... 1 Transactions 100.0000000
需要的输出:#--排序和分组
0 ABC123ABC ... 5 Transactions 1,100.0000000 #-- Sum of (100.0000000, 50.0000000, 300.0000000, 300.0000000, 250.0000000)
1 123ABC123 ... 3 Transactions 350.0000000
2 XYXY12XYX ... 2 Transactions 750.0000000
3 1OPR12DRT ... 1 Transactions 41.0000000
4 199SJFW1K ... 1 Transactions 100.0000000
5 KSJDHW812 ... 1 Transactions 0.1900000
Total Transactions: 13 Total Amount: 2,341.19
最佳答案
你的方法是正确的,但是你思考数据后,你没有将 Amount 转换为 Float 类型。
df['Amount'] = df['Amount'].astype(float)
现在您可以分别计算总交易数和总金额:
result = df.groupby('To')['Amount'].agg(['count','sum']).reset_index()
total_transactions = result['count'].sum()
total_amount = result['sum'].sum()
现在包含这些更改的完整代码块将如下所示:
df = pd.DataFrame(list(zip(pmtAccount, pmtAmount)), columns =['To', 'Amount'])
df['Amount'] = df['Amount'].astype(float)
result = df.groupby('To')['Amount'].agg(['count','sum']).reset_index()
total_transactions = result['count'].sum()
total_amount = result['sum'].sum()
result['count'] = result['count'].astype(str) + ' Transactions'
result = result.sort_values(by=['sum', 'count'], ascending=[False, False])
print(result)
print("Total Transactions: {} Total Amount: {}".format(total_transactions, total_amount))
输出:
To count sum
3 ABC123ABC 5 Transactions 1000.00
5 XYXY12XYX 2 Transactions 750.00
0 123ABC123 3 Transactions 350.00
1 199SJFW1K 1 Transactions 100.00
2 1OPR12DRT 1 Transactions 41.00
4 KSJDHW812 1 Transactions 0.19
Total Transactions: 13 Total Amount: 2241.19
关于python - 如何在 pandas 和 python 中创建汇总数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75079906/