Python Pandas сравнивает значения в нескольких столбцах для частичных дубликатов и удаления записи - PullRequest
0 голосов
/ 24 августа 2018

Мне нужно создать функцию / выражение, которое сравнивает несколько столбцов ('Cust ID Count', 'Revenue' и, возможно, 'Family Name' для совпадения записей, а затем сохраняет только первую запись в порядке возрастания. Кроме того, эта функция будет Рассмотрим 2 разных сценария, в которых есть несколько похожих записей:

  1. Несколько записей будут совпадать во всех столбцах / сериях, за исключением 'street' (записи 0 & 1)
  2. Несколько записей будут совпадать во всех столбцах / рядах, за исключением 'street' и 'Family Name' (записи 3 & 4)

Я понимаю, что, похоже, мы можем использовать только Cust ID count и Revenue в качестве соответствующих параметров, но я также хотел бы использовать 'family name' в качестве опции, если это возможно.

Dataset:

 idx Cust ID Count    Family Name    street          Revenue
 0   10               Smith          spring          50 #match
 1   10               Smith          wilbur          50 #match
 2   45               Jerry          jane            35 #not a match
 3   25               Cole           mary            20 #match
 4   25               Stein          mary sue        20 #match

Вывод:

 idx Cust ID Count    Family Name    street          Revenue
 0   10               Smith          spring          50 #spring is kept due to alphabetical order
 1   45               Jerry          jane            35 #not a match
 2   25               Cole           mary            20 #mary is kept due to alphabetical order

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Или менее элегантно, чем у Криса А:

df1 = df[["Cust ID Count", "Revenue"]]
df1.sort_values(by=["Cust ID Count", "Revenue"])
diff1 = df1["Cust ID Count"].values[1:] - df1["Cust ID Count"].values[:-1] == 0
diff2 = df1.Revenue.values[1:] - df1.Revenue.values[:-1] == 0

eq = (diff1 == 0 & diff2)
eq = np.insert(eq, 0, True)
df[eq]
0 голосов
/ 24 августа 2018

Попробуйте это:

(df.sort_values('Family Name')
 .drop_duplicates(['Cust ID Count', 'Revenue'], keep='first')
 .sort_index()
 .reset_index(drop=True))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...