Как проверить не на нескольких панелях данных кадров? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть следующие фреймы данных.

import pandas as pd
d={'P':['A','B','C'],
   'Q':[5,6,7]
  }
df=pd.DataFrame(data=d)
print(df)

d={'P':['A','C','D'],
   'Q':[5,7,8]
  }
df1=pd.DataFrame(data=d)
print(df1)

d={'P':['B','E','F'],
   'Q':[5,7,8]
  }
df3=pd.DataFrame(data=d)
print(df3)

Код для проверки одного столбца фрейма данных, отсутствующего в другом:

df.loc[~df['P'].isin(df1['P'])]

Как проверить то же самое в нескольких столбцах?

Как найти столбец P в df3, а не в столбце P в df и df1?

Ожидаемый результат:

    P   Q
0   E   7
1   F   8

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как насчет, Тем не менее, в Израиле уже дан экспертный ответ:)

Вы можете просто определить условия, а затем объединить их логически, например:

con1 = df3['P'].isin(df['P'])
con2 = df3['P'].isin(df1['P'])
df = df3[~ (con1 | con2)]
>>> df
   P  Q
1  E  7
2  F  8
0 голосов
/ 22 октября 2018

Вы можете связать 2 условия с & для побитового AND:

cond1 = ~df3['P'].isin(df1['P'])
cond2 = ~df3['P'].isin(df['P'])
df = df3.loc[cond1 & cond2]
print (df)
   P  Q
1  E  7
2  F  8

Или объединить значения столбцов - по concatenate или объединить список по +:

df = df3.loc[~df3['P'].isin(np.concatenate([df1['P'],df['P']]))]
#another solution 
#df = df3.loc[~df3['P'].isin(df1['P'].tolist() + df['P'].tolist())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...