You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套列场景:Pandas分组对象的个人收支差额计算

解决收支差额计算并转为字典的方案

没问题,我来帮你搞定这个需求!针对你已经按person ID和交易类型(收入/支出)分组的情况,我们可以通过以下步骤轻松计算每个人员的收支差额,并输出成字典形式:

步骤说明

  1. 将分组结果展开为宽表:用unstack()把交易类型从行维度转到列维度,这样每个人员的收入和支出会变成两列,缺失的记录(比如只有收入没有支出)会显示为NaN。
  2. 填充缺失值:用fillna(0)把NaN替换为0,确保没有记录的收支项不会影响计算。
  3. 计算收支差额:根据你的需求计算(比如收入 - 支出,如果需要支出减收入也可以调整)。
  4. 转为字典:用to_dict()方法直接把结果转成{person_id: 差额}的字典格式。

代码示例

假设你的原始DataFrame结构如下(包含person_id、transaction_type、amount三列):

import pandas as pd

# 示例数据
data = {
    'person_id': ['A001', 'A001', 'A002', 'A003', 'A003'],
    'transaction_type': ['收入', '支出', '收入', '支出', '支出'],
    'amount': [5000, 2000, 3500, 1200, 800]
}
df = pd.DataFrame(data)

接下来执行分组、计算差额并转字典:

# 按person_id和交易类型分组,聚合金额总和
grouped = df.groupby(['person_id', 'transaction_type'])['amount'].sum()

# 展开为宽表,填充缺失值,计算差额
balance = grouped.unstack(fill_value=0).assign(
    差额=lambda x: x['收入'] - x['支出']
)['差额']

# 转为字典
balance_dict = balance.to_dict()

print(balance_dict)
# 输出:{'A001': 3000, 'A002': 3500, 'A003': -2000}

补充说明

  • 如果你的交易类型字段是英文(比如'income'、'expense'),只需要把代码里的'收入'、'支出'换成对应的英文即可。
  • 要是你已经有了现成的groupby对象,直接从grouped.unstack(...)这一步开始执行就行,不用重新分组。
  • 差额的正负可以根据需求调整:如果想要支出 - 收入,就把x['收入'] - x['支出']改成x['支出'] - x['收入']。

内容的提问来源于stack exchange,提问作者lucretiuss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:08:40