0

考虑以下数据框:

   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

如果这是可能的,有没有办法通过以前出现的次数来增强它,而不仅仅是二进制指标?

4

2 回答 2

4

应该只是.duplicated()见文档)。然后,如果您想将其转换为 0 和 1 的整数,而不是FalseTrue可以.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,并将所有后续值都“看到”为Trueint通过将其强制转换为数据类型astype将更改False -> 0并且True -> 1

于 2020-11-02T19:27:44.713 回答
2

使用分配和复制:

df.assign(seenbefore = lambda x: x.a.duplicated().astype(int))
于 2020-11-02T19:32:17.420 回答