Панды: извлекать строки DF, когда значение столбца совпадает со значением столбца другого DF - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть два DF1 и DF2, как указано ниже.В первом столбце «POS» обоих фреймов данных могут быть совпадения, но другие столбцы будут другими.Я хочу сравнить столбец «POS» обоих фреймов данных, если значение «POS» DF1 находится в столбце «POS» DF2, я хочу сохранить эту строку в новом фрейме данных DF1 и сделать то же самое для DF2.Я мог бы легко это сделать с помощью словаря, сохранив POS в качестве ключей и сравнив их, чтобы получить соответствующие значения.Но словарь не примет повторяющиеся значения «POS», поэтому мне интересно, есть ли решение в Pandas DF.

df1 = 
   POS   id    freq
0 100 "idex" 3.0
1 102 "ter" 2.0
2 102 "pec" 4.0
3 103 "jek" 4.0
4 104 "jek" 4.0


df2 = 
   POS   id    freq
0 100 "treg" 3.0
1 102 "dfet" 2.2
2 102 "idet" 7.0
3 108 "jeik" 1.0
4 109 "jek" 4.0

Expected:
new_df1 = 
   POS   id    freq
0 100 "idex" 3.0
1 102 "ter" 2.0
2 102 "pec" 4.0


new_df2 = 
   POS   id    freq
0 100 "treg" 3.0
1 102 "dfet" 2.2
2 102 "idet" 7.0

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Я полагаю, вы описываете классическую проблему соединения.Я бы порекомендовал метод .merge():

df = pd.merge(df1, df2, how='left', on='POS')

, который вернет новый фрейм данных с df1.POS в качестве индекса.все столбцы из df2 будут в df1, но только для совпадающих значений POS.Вы можете поиграть с параметром how= в oder, чтобы получить то, что вам нужно.Для получения дополнительной информации см. типы соединений SQL

.
0 голосов
/ 10 декабря 2018

Вы можете использовать isin для обоих фреймов данных:

new_df1 = df1[df1.POS.isin(df2.POS)]

new_df2 = df2[df2.POS.isin(df1.POS)]

>>> new_df1
   POS    id  freq
0  100  idex   3.0
1  102   ter   2.0
2  102   pec   4.0
>>> new_df2
   POS    id  freq
0  100  treg   3.0
1  102  dfet   2.2
2  102  idet   7.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...