Pandas: drop_duplicates () based on condition in python

Below the dataset:

data_input:

    A     B
1  C13D  C07H
2  C07H  C13D
3  B42C  B65H
4  B65H  B42C
5  A45B  A47C

i.e. line 1 and line 2 are the data_inputsame, I just want to keep one, so lower line 2.

Want the result to be as follows:

data_output:

    A     B
1  C13D  C07H
2  B42C  B65H
3  A45B  A47C
+4
source share
2 answers

You can create a third column 'C'based on 'A'and 'B'and use it to find duplicates as such:

df['C'] = df['A'] + df['B']
df['C'] = df['C'].apply(lambda x: ''.join(sorted(x)))
df = df.drop_duplicates(subset='C')[['A', 'B']]
+7
source

You can use duplicatedandnp.sort

In [1279]: df[~df.apply(np.sort, axis=1).duplicated()]
Out[1279]:
      A     B
1  C13D  C07H
3  B42C  B65H
5  A45B  A47C

More details

In [1281]: df.apply(np.sort, axis=1)
Out[1281]:
      A     B
1  C07H  C13D
2  C07H  C13D
3  B42C  B65H
4  B42C  B65H
5  A45B  A47C

In [1282]: df.apply(np.sort, axis=1).duplicated()
Out[1282]:
1    False
2     True
3    False
4     True
5    False
dtype: bool
0
source

Source: https://habr.com/ru/post/1623035/


All Articles