Как получить уникальные строки фрейма данных на основе нескольких ключей - PullRequest
2 голосов
/ 03 августа 2020

У меня есть фрейм данных под названием 'df1':

Name Type Destination Data1 Data2
Bob   Car         NY   asdf  dsfg
Liz   Car         NY   asdf  dsfg

И еще один под названием 'df2':

Name Type Destination Data1 Data2
Bob  Train         LA   asdf  dsfg
Liz   Car          NY   asdf  dsfg

Я хочу объединить их вместе на основе 3 значений, чтобы сформировать 'key': имя, тип, место назначения, в результате чего будет:

Name Type Destination
Bob   Car         NY
Bob Train         LA
Liz   Car         NY

Если нет повторов и добавляется строка с Bob, Train, LA ..., поскольку это уникальная запись.

Пока у меня есть:

new_df = pd.concat([df1.Name, df2.Name]).drop_duplicates().sort_values(ascending=True).reset_index(drop=True)

, но это работает только при попытке объединить уникальный список на основе единственного ключа.

1 Ответ

1 голос
/ 03 августа 2020
  • Используйте pandas.DataFrame.duplicated, которые возвращают логическую серию, обозначающую повторяющиеся строки.
    • Вся строка используется для определения дубликатов.
    • Возвращает True для всех дублированных строк, поэтому, чтобы не дублировать строки, используйте ~, что равно (NOT).
  • Если в выходных данных требуются только указанные c столбцы, они должны быть указаны с помощью .iloc или df1[['Name', 'Type', 'Destination']], или их можно удалить после использования concat .
import pandas as pd

data1 = {'Name': ['Bob', 'Liz'], 'Type': ['Car', 'Car'], 'Destination': ['NY', 'NY'], 'Data1': ['asdf', 'asdf'], 'Data2': ['dsfg', 'dsfg']}
data2 = {'Name': ['Bob', 'Liz'], 'Type': ['Train', 'Car'], 'Destination': ['LA', 'NY'], 'Data1': ['asdf', 'asdf'], 'Data2': ['dsfg', 'dsfg']}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# concat all the desired rows
dfc = pd.concat([df1.iloc[:, :3], df2.iloc[:, :3]])

# drop the duplicated row
dfc = dfc[~dfc.duplicated()]

# display(dfc)

  Name   Type Destination
0  Bob    Car          NY
1  Liz    Car          NY
0  Bob  Train          LA

Вариант 2

  • Параметр subset в pandas.DataFrame.drop_duplicates позволяет указать, какие столбцы использовать при проверке дубликатов .
dfc = pd.concat([df1, df2]).drop_duplicates(subset=['Name', 'Type', 'Destination'])

# display(dfc)

  Name   Type Destination Data1 Data2
0  Bob    Car          NY  asdf  dsfg
1  Liz    Car          NY  asdf  dsfg
0  Bob  Train          LA  asdf  dsfg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...