【问题标题】:Drop duplicate row, If contain all same value删除重复行,如果包含所有相同的值
【发布时间】:2017-08-16 05:04:59
【问题描述】:

我有一个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)

【问题讨论】:

  • 您能否提供有关此 SO 答案的不良信息 -- stackoverflow.com/a/48346011/6361531
  • @ScottBoston 确定
  • @piRSquared 将在 value_count 中添加 sort=False 会解决这个问题吗?谢谢楼主指出
  • @piRSquared 是的,我会解决这个问题,添加 sort_values,谢谢 :-)

标签: python pandas


【解决方案1】:
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

【讨论】:

  • 在您的第二种方法中,当您执行sort 时,它是如何从不同列排序的?是不是因为axis=1。 OP 在第一个索引中有maryjohn
  • 谢谢~看来我需要再读一遍numpy手册了:)
  • @i.n.n.m, df.values 返回 numpy NDArray。当我们这样做时ndarray.sort(axis=1) - 它不关心 Pandas 列...
  • @Wen,如果这会是一个问题 - 我们可以改用 df.duplicated() 并按索引删除行...
  • @Wen,我的意思是:df.loc[~pd.DataFrame(np.sort(df.values, axis=1), columns=df.columns).duplicated()]
猜你喜欢
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 2014-01-27
  • 2016-03-09
相关资源
最近更新 更多