我有两个如下所述的数据框,我只想显示不匹配的行,熊猫有没有办法做到这一点?
DataFrame1
python manage.py migrate --fake-initial
DataFrame2
>> python manage.py makemigrations <AppName>
>> python manage.py migrate --fake-initial
我想要的输出数据框是:-
emp_id emp_name City Salary
111 aaa pune 10000
222 bbb pune 20000
333 ccc mumbai 30000
444 ddd pune 40000
答案 0 :(得分:3)
您可以尝试以下方法:
df2[~df2.isin(df1).all(1)]
输出:
emp_name City Salary
emp_id
111 aaa pune 60000
444 eee pune 40000
df2.isin(df1)看起来像这样:
emp_name City Salary
emp_id
111 True True False
222 True True True
333 True True True
444 False True True
答案 1 :(得分:3)
您可以使用concat和drop_duplicates:
df1 = pd.DataFrame([["111", "aaa", "pune", "10000"],["222", "bbb", "pune", "20000"],["333", "ccc", "mumbai", "30000"],["444", "ddd", "pune", "40000"], ], columns=['emp_id', 'emp_name', 'City', 'Salary'])
df2 = pd.DataFrame([["111", "aaa", "pune", "60000"],["222", "bbb", "pune", "20000"],["333", "ccc", "mumbai", "30000"],["444", "eee", "pune", "40000"], ], columns=['emp_id', 'emp_name', 'City', 'Salary'])
print pd.concat([df2,df1]).drop_duplicates(keep=False).drop_duplicates(['emp_id'])
emp_id emp_name City Salary
111 aaa pune 60000
444 eee pune 40000
答案 2 :(得分:2)
合并员工ID上的两个数据框:
m = df1.merge(df2, how='outer', on=['emp_id'])
查找不匹配的行:
mismatched = (m.emp_name_x != m.emp_name_y) | \
(m.City_x != m.City_y) |\
(m.Salary_x != m.Salary_y)
提取不匹配的行,从第二个数据框中选择列:
m[mismatched][['emp_id', 'emp_name_y', 'City_y', 'Salary_y']]
答案 3 :(得分:0)
如果您要检查所有行是否相同,则可以使用以下代码
dataframe2.where(dataframe2.isin(dataframe1).all(axis=1)).dropna()
答案 4 :(得分:0)
您要进行外部联接。为了达到目的,您可以执行以下操作:
join
因此,在前面的代码行中,您将指定列作为确定将进入结果数据帧的元素的列。