Python &引用;是在前面看到的;另一列的列

Python &引用;是在前面看到的;另一列的列,python,pandas,Python,Pandas,考虑以下数据帧: a 0 1 1 1 2 2 3 4 4 5 5 6 6 4 是否有一种方便的方法(无需迭代行)来为列a的每个值创建一个表示“以前见过”的列。 例如,该示例的期望输出为(0表示以前未见过,1表示以前见过): 如果这是可能的,有没有一种方法可以通过以前出现的计数而不仅仅是二进制指示符来增强它?应该是.duplicated()()。然后,如果要将其转换为0和1的整数,而不是False和True,则可以在输出上使用.astype(int): 从pd.DataFra

考虑以下数据帧:

   a
0  1
1  1
2  2
3  4
4  5
5  6
6  4
是否有一种方便的方法(无需迭代行)来为列
a
的每个值创建一个表示“以前见过”的列。 例如,该示例的期望输出为(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
。通过
astype
将其强制为
int
数据类型将更改
False->0
True->1

使用分配和复制:

df.assign(seenbefore = lambda x: x.a.duplicated().astype(int))

根据答案,然后可能是运行计数的分组
.cumsum()
函数。
df.assign(seenbefore = lambda x: x.a.duplicated().astype(int))