Як порівнювати стовпці в різних кадрах даних?


23

Я хотів би порівняти один стовпчик df з іншими df. Стовпці - це імена та прізвища. Я хотів би перевірити, чи є людина в одному кадрі даних в іншому.


Скажіть, будь ласка, як ви хочете виглядати результат? Це df з іменами, що відображаються в обох dfs, чи вам також потрібно щось інше, наприклад, count, або стовпець, що відповідає в df2, тощо. Спасибі!
Лірик


Ви можете внутрішньо приєднати два кадри даних у стовпцях, які вас цікавлять, і перевірити, чи кількість рядків у результаті позитивна.
dsaxton

FYI, порівняння імені та прізвища на будь-якому пристойно великому наборі імен закінчиться болем - багато людей мають те саме ім'я!
Ken Syme

Відповіді:


22

Якщо ви хочете перевірити рівні значення в певному стовпчику, скажімо, Ім'я, ви можете об'єднати обидва Dataframes до нового:

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

Я думаю, що це більш ефективно і швидше, ніж whereякщо у вас є великий набір даних


1
Я думаю, що ми хочемо тут використати внутрішнє з'єднання, а потім перевірити його форму.
dsaxton

10
df1.where(df1.values==df2.values).notna()

Trueзаписи показують загальні елементи. Це також розкриває положення загальних елементів на відміну від рішення з merge.


що df.у вашій відповіді? Є не тільки df1і , df2але немаєdf
Учня

3

Порівняння значень у двох різних стовпцях

Використовуючи набір, отримуйте унікальні значення в кожному стовпчику. Перетин цих двох множин забезпечить унікальні значення в обох стовпцях.

Приклад:

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

Ви можете двічі перевірити точну кількість загальних і різних позицій між двома ДФ за допомогою ISIN і value_counts ()

Так як це:

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

Результат:

приклад isin

Правда = загальна помилкова = різна


0

Зауважте, що стовпці фреймів даних - це ряд даних. Отже, якщо ви приймаєте два стовпчики як серії панд, ви можете порівнювати їх так, як ви це зробили б із масивними масивами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.