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

如何基于ID分组条件修改pandas DataFrame中pp列的数值?

解决方法

核心逻辑是筛选出每个ID分组的非最后一行,将这些行的pp值统一设为0即可,你可以用duplicated方法一行代码实现:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': [1,1,1,2,2,2,3,3,3,3,4],
    'pp': [1,1,1,0,0,0,1,1,1,1,0]
})

# 核心代码:仅保留每个ID分组最后一行的pp原值,其余行pp设为0
df.loc[df.duplicated('ID', keep='last'), 'pp'] = 0

运行后输出的df和要求的结果完全一致:

ID  pp
0    1   0
1    1   0
2    1   1
3    2   0
4    2   0
5    2   0
6    3   0
7    3   0
8    3   0
9    3   1
10   4   0

方法说明

df.duplicated('ID', keep='last')会对重复的ID行返回True,keep='last'参数表示保留每个ID的最后一行为非重复状态(返回False),因此只要把返回True的行对应的pp值设为0,就能实现需求。

如果需要用分组的写法也可以用groupby实现,效果相同:

df['pp'] = df['pp'] * df.groupby('ID').cumcount(ascending=False).eq(0).astype(int)

这个写法是按ID倒序计数,每个分组的最后一行计数值为0,和原值相乘后只有最后一行保留原有pp值,其余行结果为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:09:04