Как сравнить столбцы в разных фреймах данных?

23

Я хотел бы сравнить один столбец df с другими df. Столбцы - это имена и фамилии. Я хотел бы проверить, находится ли человек в одном фрейме данных в другом.

a_a_a
источник
Не могли бы вы указать, как вы хотите, чтобы результат выглядел? Является ли это df с именами, фигурирующими в обоих dfs, и нужно ли вам что-то еще, например count или соответствующий столбец в df2 и т. Д. Благодарность!
Лирик
Вы можете объединить два фрейма данных в столбцах, которые вам нужны, и проверить, является ли количество строк в результате положительным.
dsaxton
К вашему сведению, сравнение имени и фамилии на любом прилично большом наборе имен приведет к боли - многие люди имеют одно и то же имя!
Кен Сайм

Ответы:

22

Если вы хотите проверить равные значения в определенном столбце, скажем, Name, вы можете объединить оба кадра данных в новый:

mergedStuff = pd.merge(df1, df2, on=['Name'], how='inner')
mergedStuff.head()

Я думаю, что это более эффективно и быстрее, чем whereесли у вас большой набор данных

Тарек
источник
1
Я думаю, что мы хотим использовать здесь внутреннее соединение, а затем проверить его форму.
dsaxton
10
df1.where(df1.values==df2.values).notna()

TrueЗаписи показывают общие элементы. Это также показывает положение общих элементов, в отличие от решения с merge.

pcko1
источник
что df.в твоем ответе? Есть только df1и df2нетdf
LearneR
3

Сравнение значений в двух разных столбцах

Используя set, получите уникальные значения в каждом столбце. Пересечение этих двух наборов обеспечит уникальные значения в обоих столбцах.

Пример:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]}) df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]}) set(df1['c2']).intersection(set(df2['c2']))

Выход: {2, 5}


Сравнение имен столбцов двух фреймов данных

Если вы пытаетесь сравнить имена столбцов двух информационных фреймов:

Если df1и df2есть два кадра данных: set(df1.columns).intersection(set(df2.columns))

Это обеспечит уникальные имена столбцов, которые содержатся в обоих кадрах данных.

Пример:

df1 = pd.DataFrame({'c1': [1, 4, 7], 'c2': [2, 5, 1], 'c3': [3, 1, 1]})
df2 = pd.DataFrame({'c4': [1, 4, 7], 'c2': [3, 5, 2], 'c3': [3, 7, 5]})

set(df1.columns).intersection(set(df2.columns))

Выход: {'c2', 'c3'}

aathiraks
источник
Я думаю, что вопрос заключается в сравнении значений в двух разных столбцах в разных фреймах данных, так как вопросительный человек хочет проверить, находится ли человек в одном фрейме данных в другом.
Дивьяншу Шекхар
Спасибо, я неправильно понял вопрос. Я обновил ответ сейчас.
Атиракс
1

Вы можете дважды проверить точное количество общих и разных позиций между двумя df, используя isin и value_counts ()

Как это:

df['your_column_name'].isin(df2['your_column_name']).value_counts()

Результат:

пример исин

True = общий False = другой

Куба С
источник
0

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

Тимур
источник