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

将重复值替换为Null并仅保留最后一个值的实现方法

Pandas:按ID和Date分组后仅保留每组最后一个EoM_Val

可以用Pandas的groupby结合transform方法实现需求,核心思路是对每个ID+Date分组,仅保留该组最后一行的EoM_Val值,其余行替换为Null。

步骤1:构造示例DataFrame

import pandas as pd

data = {
    'ID': ['AAA', 'AAA', 'BBB', 'BBB'],
    'Date': ['2021-06-30', '2021-06-30', '2021-06-30', '2021-06-30'],
    'EoM_Val': [3946750, 3946750, 2792182, 2792182],
    'Val': [3, 2, 6, 7]
}
df = pd.DataFrame(data)

步骤2:处理EoM_Val列

# 按ID和Date分组,仅保留每组最后一行的EoM_Val,其余设为Null
df['EoM_Val'] = df.groupby(['ID', 'Date'])['EoM_Val'].transform(
    lambda x: x.where(x.index == x.index[-1], pd.NA)
)

代码解释

  • groupby(['ID', 'Date']):以ID和Date为分组键,将数据划分为多个子组
  • transform:对每个分组执行自定义逻辑,返回与原DataFrame长度一致的结果,保证索引对齐
  • x.where(条件, 替换值):当条件满足时保留原数值,否则替换为pd.NA(Pandas中的Null类型);这里的条件是当前行索引等于分组的最后一个索引,即仅保留每组最后一行的EoM_Val

处理后的结果

ID        Date   EoM_Val  Val
0  AAA  2021-06-30      <NA>    3
1  AAA  2021-06-30  3946750    2
2  BBB  2021-06-30      <NA>    6
3  BBB  2021-06-30  2792182    7

注:如果使用旧版本Pandas,pd.NA可替换为np.nan(需提前导入numpy)


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:40:36