2017-04-21 77 views
1

我有一个数据集,列的排序是无意义的,但列的组合是有意义的。换句话说,在下面的数据帧例如:删除重复行,同时忽略列排序

| A | B | C | D | 
|---------------| 
| h | i | j | k | 
| k | j | h | k | 

[A,B,C,D]是列标题,和[h,i,j,k]是值 - row 1row 2和可以被认为是相同的细胞。

我想解决的问题是原则上删除第二行。我很熟悉df.delete_duplicates()的用法,但是这并没有将这两行看作是等同的。 我认为解决方案的一个解决方案是按字母顺序对每一行进行排序,但我无法想出一个办法来做到这一点。

帮助非常感谢,

卢克

+0

第一行有'i'价值,第二个没有。它们如何相同?你也应该添加'pandas'标签并删除'jupyter-notebook' =)。 – gereleth

+0

如果第二行是拼写错误,并且需要'i'而不是'k',那么请使用[this](http://stackoverflow.com/a/43528612/2901002) – jezrael

回答

0

希望有所值的顺序并不重要:)

import pandas as pd 
a = list('hkjk') 
b = list('kjhk') 
df = pd.DataFrame([a, b], columns=list('ABCD')) 
cols = df.columns.tolist() 
df = df.to_dict(orient='index') 
new_records = {k1: list(sorted([v2 for k2, v2 in v1.items()])) for k1, v1 in df.items()} 
df = pd.DataFrame([v for _, v in new_records.items()], columns = cols) 
df.drop_duplicates(inplace=True)