我有一个Dataframe如下:

df = pd.DataFrame({'first' : ['John', 'Mary','Peter'],
                      'last' : ['Mary', 'John','Mary']})

df
Out[700]:
   first  last
0   John  Mary
1   Mary  John
2  Peter  Mary

当行包含相同的值时,我要删除副本
在这种情况下,预期的产出将是:
   first  last
0   John  Mary
2  Peter  Mary

以下是我目前的做法:
df['DropKey']=df.apply(lambda x: ''.join(sorted(pd.Series(x))),axis=1)
df.drop_duplicates('DropKey')

有什么有效的方法来实现这个目标吗?
我的真实数据大小:
df.shape
Out[709]: (10000, 607)

最佳答案

In [13]: pd.DataFrame(np.sort(df.values, axis=1), columns=df.columns).drop_duplicates()
Out[13]:
  first   last
0  John   Mary
2  Mary  Peter


In [18]: df.values.sort(axis=1)  # NOTE: it sorts DF in-place

In [19]: df
Out[19]:
  first   last
0  John   Mary
1  John   Mary
2  Mary  Peter

In [20]: df.drop_duplicates()
Out[20]:
  first   last
0  John   Mary
2  Mary  Peter

关于python - 删除重复的行,如果包含所有相同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45701346/

10-11 07:22