Estou tendo dois dataframes:
import pandas as pd
df1=pd.DataFrame({'ID':['A', 'B', 'C', 'D', 'E'], 'Date':['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], 'Value1':[1, 2, 3, 4, 5], 'Value2':[5, 6, 7, 8, 9]})
df2=pd.DataFrame({'ID':['A', 'B', 'C', 'D'], 'Date':['2024-01-30', '2024-01-30', '2024-01-30', '2024-01-30'], 'Value1':[1, 2, 7, 4], 'Value2':[5, 6, 7, 9]})
Aqui está como df1
fica:
ID Date Value1 Value2
0 A 2024-01-01 1 5
1 B 2024-01-02 2 6
2 C 2024-01-03 3 7
3 D 2024-01-04 4 8
4 E 2024-01-05 5 9
Aqui está como df2
fica:
ID Date Value1 Value2
0 A 2024-01-30 1 5
1 B 2024-01-30 2 6
2 C 2024-01-30 7 7
3 D 2024-01-30 4 9
Agora meu objetivo é descobrir quais são as duas linhas entre esses dois dataframes que possuem valores diferentes em colunas ['Value1', 'Value2']
baseadas em 'ID'
coluna. Neste caso, as linhas com 'ID'
s as 'C'
e 'D'
. Observe que a 'Date'
coluna é diferente, mas não preciso compará-las.
Alguma ideia sobre uma solução elegante sem empacotar todos os dataframes?
Você pode usar
merge
equery
para encontrar as diferenças:O mesmo sem colunas indesejadas:
Saída:
Anti-junção
Consegui isso com um
anti join
para determinar oIDs
que não corresponde entre os dois.