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

如何将DataFrame重复行的Amt值合并到新列并清理NaN行?

解决DataFrame重复组的Amt列合并问题

完整解决方案代码

import pandas as pd

# 构造示例DataFrame(可替换为你的实际数据)
data = {
    'ref_num': [1, 1, 2, 2, 3, 3],
    'Amt': [10, 20, 5, 15, 12, 7],
    'fy': [21, 21, 22, 22, 20, 20],
    'fund_type': ['IX', 'IX', 'III', 'III', 'VI', 'VI']
}
df = pd.DataFrame(data)

# 1. 生成new_Amt列:每组取第二行的Amt赋值给第一行
df['new_Amt'] = df.groupby('ref_num')['Amt'].shift(-1)

# 2. 删除含NaN的行(即每组的第二行)
df = df.dropna(subset=['new_Amt'])

print(df)

代码解释

  • 分组偏移生成new_Amt:groupby('ref_num')['Amt'].shift(-1)会按ref_num分组,将每组内的Amt列向下偏移一位。这样每组的第一行就能获取到同组第二行的Amt值,而每组的第二行因为没有下一行数据,new_Amt会被设为NaN。
  • 删除NaN行:dropna(subset=['new_Amt'])精准筛选掉new_Amt为NaN的行,留下每组的第一行数据,完成最终处理。

你原代码的问题分析

你之前的lambda函数逻辑存在两处关键错误:

  1. 条件x['ref_num'] == x['ref_num']永远为真,导致所有行的new_Amt都被赋值为当前行的Amt,完全不符合需求;
  2. 用x['new_Amt'] is NaN判断空值是错误的,正确的空值判断应该用pd.isna(),而且逐行apply无法直接获取同组其他行的数据,这种方法效率低且逻辑难以实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:25:30