Python - подсчитать количество элементов, равных между двумя столбцами двух фреймов данных - PullRequest
1 голос
/ 29 мая 2020

У меня есть два фрейма данных: df1, df2, которые содержат два столбца, col1 и col2. Я хотел бы рассчитать количество элементов в столбце col1 из df1, которые равны col2 из df2. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы можете использовать Series.isin df1.col1.isin(df2.col2).sum():

df1 = pd.DataFrame({'col1': [1, 2, 3, 4, 5, 6]})
df2 = pd.DataFrame({'col2': [1, 3, 5, 7]})

nb_comon_elements = df1.col1.isin(df2.col2).sum()

assert nb_comon_elements == 3

Будьте осторожны в зависимости от вашего варианта использования, потому что:

df1 = pd.DataFrame({'col1': [1, 1, 1, 2, 7]})
df1.col1.isin(df2.col2).sum()

вернет 4 и не 2, потому что все 1 из df1.col1 присутствуют в df2.col2. Если это не ожидаемое поведение, вы можете удалить дубликаты из df1.col1 перед проверкой размера пересечения:

df1.col1.drop_duplicates().isin(df2.col2).sum()

Что в этом примере вернет 2.

Чтобы лучше понять, почему это происходит вы можете посмотреть, что возвращает .isin:

df1['isin df2.col2'] = df1.col1.isin(df2.col2)

Что дает:

   col1  isin df2.col2
0     1           True
1     1           True
2     1           True
3     2          False
4     7           True

Теперь .sum() складывает логические значения из столбца isin df2.col2 (всего 4 True).

1 голос
/ 29 мая 2020

Я предполагаю, что вы используете pandas.

Один из способов - просто использовать pd.merge и объединить второй столбец и вернуть длину этого столбца.

pd.merge(df1, df2, on="column_to_merge")

Pandas по умолчанию выполняет внутреннее слияние.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...