我交叉连接了一个查询,并以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
答案 0 :(得分:3)
您可以先依次通过np.sort
和drop_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
还请注意,保留了原始数据的顺序。