我有一个pandas数据框,其中包含一个可能重复的列。我想创建一个列,如果该行是重复的,将生成1,如果不是,则生成0。
所以,如果我有:
A|B
1 1|x
2 2|y
3 1|x
4 3|z
我会得到:
A|B|C
1 1|x|1
2 2|y|0
3 1|x|1
4 3|z|0
我尝试了df['C'] = np.where(df['A']==df['A'], '1', '0')
,但这只是在C中创建了一个全1的列。
答案 0 :(得分:7)
首先需要Series.duplicated
带参数keep=False
的所有重复项,然后将布尔值掩码(True
和False
s)转换为1
s和{ {1}} astype
0
{}},然后根据需要投放到int
:
str
如果需要检查列df['C'] = df['A'].duplicated(keep=False).astype(int).astype(str)
print (df)
A B C
1 1 x 1
2 2 y 0
3 1 x 1
4 3 z 0
和A
中的重复项,请一起使用DataFrame.duplicated
:
B
和numpy.where
解决方案:
df['C'] = df.duplicated(subset=['A','B'], keep=False).astype(int).astype(str)
print (df)
A B C
1 1 x 1
2 2 y 0
3 1 x 1
4 3 z 0