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))