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

如何用Pandas为分组数据分配1和0标记值?

如何为Pandas分组的首行标记1,其余行标记0

给定如下DataFrame:

import pandas as pd

data = {'A': ['ABCD_1', 'ABCD_1', 'ABCD_1', 'ABCD_1', 'PQRS_2', 'PQRS_2', 'PQRS_2', 'PQRS_2', 'PQRS_2', 'PQRS_3', 'PQRS_4'], 'B':[2, 3, 5, 6, 7, 8, 9, 11, 13, 15, 17]}
df = pd.DataFrame(data)

需求:按A列分组,每个分组的第一行赋值1,其余行赋值0;如果分组只有一行,该行同样赋值1。

你尝试的pd.factorize(df['A']) + 1无法实现需求,因为factorize是给每个不同的分组分配递增的整数标记,而非识别分组内的首行。

解决方案1:使用groupby.cumcount()

这是最简洁的方法,通过分组内计数判断是否为第一行:

df['P'] = df.groupby('A').cumcount().eq(0).astype(int)
  • groupby('A').cumcount():对每个分组内的行从0开始顺序计数
  • .eq(0):判断是否为分组内的第一行(计数为0),返回布尔值
  • .astype(int):将布尔值转为整数(True→1,False→0)

解决方案2:通过groupby.head(1)定位首行

先初始化新列全为0,再给每个分组的首行赋值1:

df['P'] = 0
# 获取每个分组第一行的索引,赋值1
df.loc[df.groupby('A').head(1).index, 'P'] = 1

最终输出结果

执行上述任意一种方法后,DataFrame会变为:

A   B  P
0   ABCD_1   2  1
1   ABCD_1   3  0
2   ABCD_1   5  0
3   ABCD_1   6  0
4   PQRS_2   7  1
5   PQRS_2   8  0
6   PQRS_2   9  0
7   PQRS_2  11  0
8   PQRS_2  13  0
9   PQRS_3  15  1
10  PQRS_4  17  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:20:33