2015-09-15 2 views
0

У меня есть набор данных, который содержит все мировые чашки с колонками Date, Team A, Team B и некоторыми другими столбцами. Но этот набор данных Повторяющиеся в нем, как и на матч Индия Vs Австралии, есть две записи, как показано ниже,Сравнение одной записи со всеми остальными для удаления дубликатов - python или R

DATE   Team A  Team B 
24-May-1983 India  Australia 
24-May-1983 Australia India 

я могу удалить дубликаты записей через два для петель в питона, но это будет неэффективно с N * M сравнения и много, если условия и цикл в нем. Есть ли эффективный способ сделать это в python или R?

Заранее спасибо.

ответ

5

Нечто подобное, вероятно, хорошо, вам просто нужно поставить команды в алфавитном порядке, так что это не имеет значения, один был записан как команды A против команды B:

df['team_tuple'] = df.apply(
    lambda row: tuple(
     sorted((row['Team A'], row['Team B'])) 
    ), 
    axis='columns' 
) 
df 
Out[17]: 
      DATE  Team A  Team B   team_tuple 
0 24-May-1983  India Australia (Australia, India) 
1 24-May-1983 Australia  India (Australia, India) 

duplicates = df.loc[:, ['DATE', 'team_tuple']].duplicated() 
cleaned_df = df.loc[~ duplicates, :] 
In [16]: cleaned_df 
Out[16]: 
      DATE Team A  Team B   team_tuple 
0 24-May-1983 India Australia (Australia, India) 
+0

Это имеет смысл. Большое спасибо.. :) – jeevag

4

В R, вы можете сортируйте два столбца, а затем удалите дубликаты. Вот что с data.table:

library(data.table) 
DT[`Team A` < `Team B`, `:=`(
    `Team A` = `Team B`, 
    `Team B` = `Team A` 
)] 
unique(DT) 
#   DATE Team A Team B 
# 1: 1983-05-24 India Australia 

Либеральное применение обратных кавычек необходимо, потому что ОП использовали имена столбцов с пробелами. Первым шагом может считаться:

Подмножество, где A < B, и в пределах этого подмножества, заменяйте их.

`:=` является оператором присваивания внутри таблицы данных. Он применяется как функция здесь.

# input data 
DT <- data.table(DATE=as.IDate(c("24-May-1983","24-May-1983"), "%d-%b-%Y"), 
    `Team A`=c("India", "Australia"), `Team B` = c("Australia", "India"))