Элементное сравнение данных и выполнение условных операций - PullRequest
0 голосов
/ 18 марта 2019

Предположим, у меня есть эти 2 кадра данных:

a = pd.DataFrame(columns = ['a','b'], data = [[1,2],[3,4], [5,6],[7,8]])
b = pd.DataFrame(columns = ['a','b'], data = [[1,2],[7,4], [9,6],[11,8]])

Что я хочу сделать, это сравнить каждый элемент a с каждым элементом b и, если есть совпадение, добавить +1 к счетчику, если нет совпадения, я хочу добавить непревзойденная строка в пустом кадре данных выше.

Это мой код:

counter = 0
counts = pd.DataFrame()

for i, j in a.iterrows():
    for a, row in b.iterrows():

        if a[j] == b[row]:
            counter += 1

        else:

            counts = counts.append(a[row])

при запуске я получаю эту ошибку:

TypeError: 'int' object is not subscriptable

Как я могу это сделать и исправить эту ошибку?

Спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Другой подход - использовать маску (при возможности всегда избегайте петель for в пандах):

m = (a==b).apply(np.all, axis=1)   #assuming you want both elements to be equal
counts = a[~m].copy()
counter = m.sum()
1 голос
/ 18 марта 2019

Вы можете просто использовать merge с indicator

s=a.merge(b,indicator=True,how='outer')
s
Out[481]: 
    a  b      _merge
0   1  2        both
1   3  4   left_only
2   5  6   left_only
3   7  8   left_only
4   7  4  right_only
5   9  6  right_only
6  11  8  right_only

Ваш счет

s['_merge'].eq('both').sum()
Out[482]: 1

New df

newdf=s.loc[s['_merge']=='right_only',:].copy().drop('_merge',1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...