Python Pandas - отбрасывать строки на основе столбцов 2-х фреймов данных - PullRequest
0 голосов
/ 07 мая 2018

У меня есть 2 кадра данных со столбцом с именем frames. Кадры данных - это данные, извлеченные из двух видео, записанных одновременно двумя участниками. В данных отсутствуют некоторые кадры (разные для каждого видео) из-за неудачного отслеживания. Я хочу взять пересечение на основе целочисленного значения кадра df['frame'].

Аналогичный вопрос размещен здесь: Панды - пересечение двух фреймов данных на основе записей в столбцах , но принятый ответ - соединение, а не пересечение.

Пример данных

import pandas as pd

df1 = pd.DataFrame(data={'frame': [1, 2, 3]})
df2 = pd.DataFrame(data={'frame': [2, 3, 4]})

Желаемый вывод

Удалены строки, не объединенные в df1['frame'] и df2['frame']

>>> print(df1)
   frame
1      2
2      3

>>> print(df2)
   frame
0      2
1      3

(я могу сбросить индекс после завершения обработки с помощью df1.reset_index(drop=True))

Пытались

Сначала я подумал о том, чтобы получить пересечение столбца кадров обоих информационных кадров с помощью:

df1_idx = df1['frame']
df2_idx = df2['frame']
intersection_idx = df1_idx.intersection(df2_idx)

Ошибка:

File "/*python_path*/site-packages/pandas/core/generic.py", line 3081, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'intersection'

После получения индексов фреймов, которые находятся в обоих фреймах данных, я подумал о том, чтобы сделать что-то вроде (упомянуто в: удаление строк из фрейма данных на основе условия «не в» ):

df1 = df1.drop(df[~df['frame'].isin(intersection_idx)])

System

Python 3.6.5 с пандами 0.22.0, установленными с Anaconda.

1 Ответ

0 голосов
/ 07 мая 2018

а как же

df1[df1.frame.isin(df2.frame)]
Out: 
   frame
1      2
2      3

df2[df2.frame.isin(df1.frame)]
Out: 
   frame
0      2
1      3
...