按_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
相关产品推荐
相关产品推荐

