Python сравнить два разных размера кадра данных - PullRequest
0 голосов
/ 22 марта 2020

У меня проблема со сравнением двух разных размеров dafaframes и показом результата совпадения и несоответствия.

Два dafaframes включены страны. В то время как один перечислен во всех странах мира (country_data_df), другой состоит из нескольких стран. (country_list_df)

Вот структура обоих фреймов данных

Index Country
0     Afghanistan
..     ..

Другая проблема заключается в том, как сделать это с помощью метода contains, например Venezuela (Bolivarian Republic of) vs Venezuela

Вот мой фрагмент кода.

seen_countries = []
unseen_countries = []
for a in country_list_df:
    if a in country_data_df:
        seen_countries.append(a)
    else:
        unseen_countries.append(a)

Как я могу решить это?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Очистите ваши данные

Вторая часть вашего вопроса касается сравнения разнородных значений в ваших данных. Проще всего было бы стандартизировать названия вашей страны в вашем списке всех стран к значениям в ваших данных. Гораздо проще очистить меньший, более ограниченный список стран для повторного использования с вашим большим набором входных данных.

Выполните следующие действия, как только в списке стран есть значения, которые можно сравнить с вашими входными данными.

clean_data стандартизировал значения для всех строчных букв и поместил их в набор , который автоматически дает вам уникальные значения.

seen_countires автоматически будет создается с помощью clean_data при предоставлении столбца вашей страны из набора входных данных.

unseen_countries - это просто набор всех стран в country_list - seen_countries set.

#!/usr/bin/env python

import pandas as pd


def clearn_data(x):
    retval = set([v.lower() for v in x])
    return retval

if __name__ == "__main__":
    country_data = ["C", "D", "E", "F", "a", "A"]
    country_list = ["a", "b", "c", "d", "e","f","g"]

    country_list_df = pd.DataFrame(country_list, columns=["Country"])
    country_data_df = pd.DataFrame(country_data, columns=["Country"])

    seen_countries = clean_data(country_data_df.Country)
    unseen_countries = clean_data(country_list_df.Country) - seen_countries

    print("__Seen Countries__ ")
    print(seen_countries)

    print("__Unseen Countries__ ")
    print(unseen_countries)

Output

Seen Страны
{'c', 'a', 'd', 'f', 'e'}

Невидимые страны
{'g', 'b'}

0 голосов
/ 22 марта 2020

Вы пробовали использовать Pandas isin? он отлично подходит для сравнения данных, даже если они имеют разные размеры.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html

Пример:

import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'f'], 'C': ['Z', 'V', 'W']})
other = pd.DataFrame({'A': [1, 3, 3, 2], 'B': ['e', 'f', 'f', 'e']})
print(df.isin(other))

приводит к:

       A      B      C
0   True  False  False
1  False  False  False
2   True   True  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...