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

在Pandas中将每个唯一分组的首行设为1的高效实现方案

更高效的Pandas实现方案

你的需求是将每个唯一Name对应的首行quantity设为1,其余为0。原代码使用iterrows逐行循环,在数据量较大时效率极低,因为iterrows和循环内的loc操作都是Python层面的逐行处理,远不如Pandas的矢量化操作高效。

以下是两种最优实现方法:

方法一:利用duplicated()函数

duplicated()会标记重复出现的行(默认保留首次出现的行不标记),取反后即可定位每个Name的首行,再转换为整数类型即可得到目标结果:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Name': ['a', 'a', 'b', 'b', 'c'],
    'quantity': [0, 0, 0, 0, 0]
})

# 核心操作
df['quantity'] = (~df['Name'].duplicated()).astype(int)
print(df)

输出结果:

Name  quantity
0    a         1
1    a         0
2    b         1
3    b         0
4    c         1

方法二:利用groupby+cumcount

通过分组后给每组内的行编号(从0开始),判断编号是否为0即可定位首行:

df['quantity'] = (df.groupby('Name').cumcount() == 0).astype(int)

此方法逻辑清晰,同样是矢量化操作,效率与方法一接近。

效率说明

这两种方法均基于Pandas的底层矢量化实现,避免了Python循环的开销,在大数据集(比如百万级行数)下,速度会比原循环方法快上百倍甚至更多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:20:29