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

Python中按指定逻辑计算新行并追加到Pandas DataFrame的方法

Pandas 分组计算追加AF行解决方案

实现思路

先按Name和Date维度分组,计算每组内AC金额减AP金额得到AF的金额,生成新的AF行后拼接回原DataFrame即可,原有数据不会被修改。

完整代码

1. 依赖导入与示例数据构造

import pandas as pd

# 替换为你自己的DataFrame即可
df = pd.DataFrame({
    'Type': ['AC', 'AP', 'AC', 'AP', 'AC'],
    'Name': ['张三', '张三', '李四', '李四', '王五'],
    'Date': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02'],
    'amount': [100, 40, 200, 120, 150]
})

2. 计算AF类型的新行

af_rows = df.groupby(['Name', 'Date'], as_index=False).apply(
    lambda group: pd.Series({
        'Type': 'AF',
        'amount': group[group['Type'] == 'AC']['amount'].sum() - group[group['Type'] == 'AP']['amount'].sum()
    })
).reset_index(drop=True)

# 可选:过滤掉金额为空的组(即该组缺少AC或AP数据的行)
# af_rows = af_rows[af_rows['amount'].notna()]

3. 拼接原有数据和新行

final_df = pd.concat([df, af_rows], ignore_index=True)

# 可选:按名称、日期、类型排序,输出更规整
final_df = final_df.sort_values(['Name', 'Date', 'Type'], ignore_index=True)

说明

  • 计算时使用sum()是为了兼容单个分组下AC/AP有多条记录的场景,如果你的数据中每个(Name, Date)分组下AC和AP最多各有一条,把sum()替换为iloc[0]也可以。
  • 如果之前用pivot没成功,大概率是pivot后转换回长表的步骤出错,上面的分组apply写法更直观,不容易出现维度匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:05