Сравните столбцы в Pandas между двумя неравными размерами - PullRequest
0 голосов
/ 11 февраля 2020

У меня два pandas DF. Неравных размеров. Например:

Df1
id     value
a      2
b      3
c      22
d      5 

Df2 
id     value
c      22
a      2

Нет. Я хочу извлечь из DF1 те строки , которые имеют тот же идентификатор, что и в DF2. Теперь мой первый подход - запустить 2 для циклов, что-то вроде:

x=[]
for i in range(len(DF2)):
    for j in range(len(DF1)):
        if DF2['id'][i] == DF1['id'][j]:
          x.append(DF1.iloc[j])    

Теперь это нормально, но для 2 файлов по 400 000 строк в одной и 5000 в другой мне нужны эффективные Pythonic + Pnadas способ

Ответы [ 3 ]

2 голосов
/ 11 февраля 2020

Вы можете попробовать это:

df = df1[df1.set_index(['id']).index.isin(df2.set_index(['id']).index)]
2 голосов
/ 11 февраля 2020
import pandas as pd

data1={'id':['a','b','c','d'],
       'value':[2,3,22,5]}

data2={'id':['c','a'],
       'value':[22,2]}

df1=pd.DataFrame(data1)
df2=pd.DataFrame(data2)
finaldf=pd.concat([df1,df2],ignore_index=True)

Вывод после конкатата

   id   value
0   a   2
1   b   3
2   c   22
3   d   5
4   c   22
5   a   2

Окончательный вывод

finaldf.drop_duplicates()

    id  value
0   a   2
1   b   3
2   c   22
3   d   5
2 голосов
/ 11 февраля 2020

Вы можете объединить кадры данных, а затем проверить, все ли элементы duplicated или нет, затем drop_duplicates и сохранить только первое вхождение:

m = pd.concat((df1,df2))
m[m.duplicated('id',keep=False)].drop_duplicates()

  id  value
0  a      2
2  c     22
...