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

按_a列分组将_b列每组首个值改为0的Pandas实现方法

解决方案

没问题,这有两种实用的方法可以完成你要的操作,都是Pandas里常用的技巧:

方法一:利用duplicated()快速定位每组首行(推荐,效率更高)

因为你的_a列是连续分组的(相同值的行挨在一起),可以直接用duplicated()标记重复的_a值,然后把**非重复的行(也就是每组的第一行)**的_b列设为0:

import pandas as pd
import numpy as np

df = pd.DataFrame({'_a':[1,1,1,2,2,3,3],'_b':[3,4,5,3,3,3,9]})

# 定位每组的第一行(_a不重复的行),将对应_b值改为0
df.loc[~df['_a'].duplicated(), '_b'] = 0
print(df)

运行后输出就是你想要的结果:

_a  _b
0   1   0
1   1   4
2   1   5
3   2   0
4   2   3
5   3   0
6   3   9

方法二:用groupby()结合cumcount()

如果你的_a列不是连续分组的(相同值的行可能分散),用groupby的方法更稳妥:它会先按_a分组,给每组的行从0开始编号,编号为0的就是每组第一行,再修改对应_b值:

import pandas as pd
import numpy as np

df = pd.DataFrame({'_a':[1,1,1,2,2,3,3],'_b':[3,4,5,3,3,3,9]})

# 给每组的行分配序号,筛选序号为0的行,修改_b为0
df.loc[df.groupby('_a').cumcount() == 0, '_b'] = 0
print(df)

这个方法不管_a的行是不是连续的都能生效,适用性更广。

两种方法都能达到你要的效果,根据你的数据情况选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:31