Сравните кадры данных на основе значений строк в Pandas - PullRequest
0 голосов
/ 20 ноября 2018

Каков наилучший способ сравнения двух наборов данных (CSV-файлов) с использованием Pandas, если между данными нет кардинальности 1: 1?

Например: вот пример из набора данных один -

#### Row Item Color Price
01 Shirt Red $30
02 Hat Blue $10

И пример из кадра данных два -

#### Row Item Color Price
01 Trouser Black $20
02 Bag Yellow $ 30
03 Hat Blue $10
04 Shirt Red $30

Так что, если я хотел сравнитьвсе строки в обоих наборах данных, где есть строка рубашки .

как лучше это сделать?

Я использую Pandas / Python3.7

Спасибо!

Ответы [ 3 ]

0 голосов
/ 20 ноября 2018

Вы можете просто использовать панд merge следующим образом:

pd.merge(df1[df1.Item == 'Shirt'], df2[df2.Item == 'Shirt'], on=['Item','Color', 'Price')

Это будет выводить только тогда, когда все столбцы в обоих информационных фреймах совпадают для Item = 'Shirt' и соответствующие столбцы также равны.

Дайте мне знать, если вы этого хотите.

0 голосов
/ 20 ноября 2018

Фильтр после merge

df1.merge(df2,on='Item').loc[lambda x : x.Item=='Shirt']
Out[89]: 
   Row_x   Item Color_x Price_x  Row_y Color_y Price_y
0      1  Shirt     Red     $30      4     Red     $30
0 голосов
/ 20 ноября 2018

проверьте этот пример:

DF1 = pd.DataFrame(data={'c1':['abc','abc','iop','iop'],'c2':['xyz','mno','yut','trg'],'c3':[0,0,0,0]})

    c1  c2  c3
0   abc xyz 0
1   abc mno 0
2   iop yut 0
3   iop trg 0


DF2 = pd.DataFrame(data={'c1':['iop','abc','bhj','iop','xdf'],'c2':['yut','mno','uio','yut','edc']})
    c1  c2
0   iop yut
1   abc mno
2   bhj uio
3   iop yut
4   xdf edc
match = pd.merge(DF1,DF2,on=['c1','c2'],how='inner')
print(match)

    c1  c2  c3
0   abc mno 0
1   iop yut 0
2   iop yut 0

Таким образом, используя pd.merge, вы можете получить соответствующие строки

...