Сравните несколько столбцов в двух фреймах данных и выберите строки с разными значениями - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь сравнить 2 столбца в одном кадре данных (df1) с 2 столбцами в другом кадре данных (df2).После сравнения я хочу выбрать строки, в которых первые два столбца не совпадают.Ниже вы можете увидеть мои попытки, и вот как выглядят фреймы данных [ 1 ]

import pandas as pd

fd1= 'Q37.xlsx'
fd2= 'Q43.xlsx'
df1 = pd.read_excel( fd1, sheetname='prio 1') 
df2 = pd.read_excel( fd2, sheetname='prio 1')


closed_items= {} #items in fd1 but not in fd2
new_items={}  #items in fd2 but not in fd1

Чтобы получить закрытые элементы, я попробовал следующие 3 вещи

closed_items.where(df1[df1['Code'].values!=df2[df2['Code'].values and 
                   df1['Owner'].values != key in df1['Owner'].values)

и получил

ValueError: Can only compare identically-labeled Series objects

Я также пытался

Closed_items = df2.loc[(df2['Code'] != df1['Code']) and 
               df2.loc[(df2['Owner'] != df1['Owner'])]

И, наконец, я пытался

for key in df1['Code'].values:
    if key in df1['Code'].values != key in df1['Code'].values or key in 
              df1['Owner'].values != key in df1['Owner'].values:

          closed_items.append()
     else:
           pass 

, который дал этот синтаксис

 The truth value of an array with more than one element is ambiguous. 
 Use a.any() or a.all()

...

AFP= pd.ExcelWriter("AFP.xlsx", engine='xlsxwriter')

closed_items.to_excel(AFP, sheet_name='Closed', index=False)

1 Ответ

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

Проблема в том, что df1 и df2 имеют разные формы, поэтому loc не будет работать.Сначала вам нужно объединить df1 и df2, как

df3 = df1.merge(df2,on='common_key',how='left',suffixes=('_df1','_df2'))
            df3['select'] = 0
df3.loc[(df3['Code_df1'] == df3['Code_df2']) & 
                           (df3.loc[(df3['Owner_df1'] == df3['Owner_df2']),'select'])] = 1

df3.loc[df3['select']==0,:]

вернется туда, где они не совпадают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...