Вычтите два нечисловых кадра данных в пандах Python
У меня есть два кадра данных с одинаковыми именами столбцов. Я хочу вычесть одно из другого. Таким образом, AB должен дать мне то, что находится в A, но также не в B. Таким образом, минус пересечение A и B. Как показано на фотографии ниже.
Код:
import pandas as pd
df1 = pd.DataFrame(columns=['A','B','C'])
df2 = pd.DataFrame(columns=['A','B','C'])
df1 = df1.append({'A': 'bmw','B':'three','C':'series'}, ignore_index=True)
df1 = df1.append({'A': 'merc','B':'S','C':'class'}, ignore_index=True)
df1 = df1.append({'A': 'Audi','B':'A','C':'eight'}, ignore_index=True)
df2 = df2.append({'A': 'merc','B':'ccc','C':'sss'}, ignore_index=True)
print(df1)
print(df2)
print(pd.merge(df1,df2,how='left'))
Результат, который я ожидаю:
{'A': 'bmw','B':'three','C':'series'}
{'A': 'Audi','B':'A','C':'eight'}
Но вместо этого я получаю
{'A': 'merc','B':'ccc','C':'sss'}
1 ответ
Вам просто нужно удалить строки, где df1['A']
во всем df2['A']
серии.
res = df1.loc[~df1['A'].isin(df2['A'])]
print(res)
# A B C
# 0 bmw three series
# 2 Audi A eight