考虑以下数据框:
a
0 1
1 1
2 2
3 4
4 5
5 6
6 4
是否有一种方便的方法(无需迭代行)来为 column 的每个值创建一个表示“之前见过”的列a
。例如,该示例所需的输出是(0 表示以前未见过,1 表示以前见过):
0
1
0
0
0
0
1
如果这是可能的,有没有办法通过以前出现的次数来增强它,而不仅仅是二进制指标?
应该只是.duplicated()
(见文档)。然后,如果您想将其转换为 0 和 1 的整数,而不是False
您True
可以.astype(int)
在输出中使用:
来自pd.DataFrame
:
df.duplicated(subset="a").astype(int)
0 0
1 1
2 0
3 0
4 0
5 0
6 1
dtype: int32
来自pd.Series
:
df["a"].duplicated().astype(int)
0 0
1 1
2 0
3 0
4 0
5 0
6 1
Name: a, dtype: int32
这会将一个值第一次“看到”为False
,并将所有后续值都“看到”为True
。int
通过将其强制转换为数据类型astype
将更改False -> 0
并且True -> 1
使用分配和复制:
df.assign(seenbefore = lambda x: x.a.duplicated().astype(int))