Сравните 2 кадра данных и найдите подходящие строки - PullRequest
1 голос
/ 27 сентября 2019

У меня есть основной Dataframe как:

Time          Frq     Seq
12:46:17      4200.0  30700.0
12:49:29      4160.0  30690.0
12:46:18      3060.0  30700.0
12:46:18      3060.0  30700.0
12:46:19      3060.0  30700.0
12:46:20      3060.0  30700.0
12:46:20      4240.0  30700.0
12:46:19      4220.0  30700.0
12:46:18      4200.0  30700.0
12:46:18      4200.0  30700.0
12:46:38      3060.0  30700.0
12:43:04      4620.0  30701.0
12:46:38      4600.0  30701.0
12:46:05      4600.0  30701.0
12:46:37      3060.0  30700.0
12:48:35      3020.0  30690.0

и дочерний Dataframe как:

Frq     Seq
3060.0  30700.0
4600.0  30701.0

Я хочу собрать 1-е вхождение строк дочернего Dataframe в Master Dataframe.

Я хочу, чтобы мой результирующий кадр данных:

Time          Frq     Seq
12:46:18      3060.0  30700.0
12:46:38      4600.0  30701.0

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Сначала удалите дубликаты в master с помощью DataFrame.drop_duplicates, а затем используйте DataFrame.merge - если пропустить параметр on, он объединяется путем пересечения имен столбцов между DataFrame s:

df = master.drop_duplicates(['Frq','Seq']).merge(child)
print (df)
       Time     Frq      Seq
0  12:46:18  3060.0  30700.0
1  12:46:38  4600.0  30701.0
0 голосов
/ 27 сентября 2019
  • pd.merge() - для объединения master dataframe и child dataframe с inner join.

  • .drop_duplicate() - отбросить все duplicate row, в котором значение столбца Frq и Seq является дублированным, и сохранить только значение first-row.

  • df.reset_index() - Сбросить указатель или уровень.

Пример.

df = master.merge(child, on=['Frq','Seq'],
     how='inner').drop_duplicates(['Frq','Seq'],keep= 'first').reset_index(drop=True)
print(df)

       Time     Frq      Seq
0  12:46:18  3060.0  30700.0
1  12:46:38  4600.0  30701.0
0 голосов
/ 27 сентября 2019

Мой подход заключается в группировке, чтобы сначала получить из каждой группы индекс для элементов вашего дочернего фрейма данных:

first = master.groupby('Frq', as_index=False).first()
first[first.Frq.isin(child.Frq)]

#       Frq      Time      Seq
# 1  3060.0  12:46:18  30700.0
# 6  4600.0  12:46:38  30701.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...