在Pandas Dataframe中查找重复的行,然后在Dataframe中添加一个列,表明该行是否重复

Pro*_*ken 4 python duplicates dataframe pandas

我有一个pandas数据框,其中包含一个可能重复的列.我想创建一个列,如果行重复则生成1,如果不重则则生成0.

所以,如果我有:

     A|B
1    1|x
2    2|y
3    1|x
4    3|z
Run Code Online (Sandbox Code Playgroud)

我会得到:

     A|B|C
1    1|x|1
2    2|y|0
3    1|x|1
4    3|z|0
Run Code Online (Sandbox Code Playgroud)

我试过df['C'] = np.where(df['A']==df['A'], '1', '0')但这只是在C中创建了一个全1的列.

jez*_*ael 8

你需要Series.duplicated与参数keep=False的所有副本,然后再投布尔面膜(TrueS和FalseS)以1S和0由s astype通过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
Run Code Online (Sandbox Code Playgroud)

如果需要检查列中的重复项AB一起使用DataFrame.duplicated:

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
Run Code Online (Sandbox Code Playgroud)

numpy.where解决方案:

df['C'] = np.where(df['A'].duplicated(keep=False), '1', '0')
print (df)
   A  B  C
1  1  x  1
2  2  y  0
3  1  x  1
4  3  z  0
Run Code Online (Sandbox Code Playgroud)