删除熊猫数据框中的重复记录,但根据字母顺序保留一个记录

时间:2018-11-04 22:10:56

标签: python pandas sorting dataframe

我交叉连接了一个查询,并以Python中的DataFrame形式返回了该查询。现在,我有了一个数据帧df,如下所示:

df = pd.DataFrame([['Peter', 'Tom',1], ['Sam', 'Ed',2], ['Tom', 'Peter',1], ['Ed', 'Sam',2]], columns=["Person 1", "Person 2", "Value"])


df 
   Person1 Person2 Value
0   Peter   Tom    1
1   Sam     Ed     2
2   Tom     Peter  1
3   Ed      Sam    2

但是,我需要删除重复项并仅保留每对记录。我想根据名字在字母表中排在第一位的那对保持住,并让我的最终数据框看起来像这样:

df_final

   Person1  Person2 Value
0   Ed      Sam      2
1   Peter   Tom      1

2 个答案:

答案 0 :(得分:3)

您可以先依次通过np.sortdrop_duplicates对列进行排序:

df_sorted = np.hstack((np.sort(df.iloc[:, :-1].values, axis=1),
                       df['Value'].values[:, None]))

res = pd.DataFrame(df_sorted, columns=df.columns)\
        .drop_duplicates()

print(res)

  Person 1 Person 2 Value
0    Peter      Tom     1
1       Ed      Sam     2

答案 1 :(得分:2)

您可以对使用df.duplicated排序的数据使用np.sort,并使用掩码删除重复项。这应该更简单。

# Sort columns and generate a duplicate mask.
m = pd.DataFrame(np.sort(df.iloc[:, :2])).duplicated()
print(m) 
0    False
1    False
2     True
3     True
dtype: bool

df = df[~m]  # Use mask to drop duplicate rows.
print(df) 
  Person 1 Person 2  Value
0    Peter      Tom      1
1      Sam       Ed      2

还请注意,保留了原始数据的顺序。