najít rozdíl mezi řadami 2 pandy datovém

hlasů
1

Mám 2 pandy DataFrames, které mají přesně stejné sloupce. Takže vypadají nějak takto:

Dataframe1:
C1 C2 C3
1  A  X
2  B  Y

Dataframe2:
C1 C2 C3
1  A  X
3  C  Z

Chci najít rozdíl mezi těmito 2 DataFrames. V podstatě i třeba po 3 výstup:

  1. Žádný ze stejných řádků 2 DataFrames - „1“ v tomto případě
  2. Řádky přítomné v dataframe1, ale chybí v dataframe2

    2  B  Y
    
  3. Řádky přítomné v dataframe2, ale chybí v dataframe1

    3  C  Z
    

Zjistil jsem, žádná ze stejné řady, jako jsou:

same_line_count = (pd.merge(df1, df2, on=['C1', 'C2', 'C3'], how='inner')).shape[0]

Ale já nejsem schopen najít další 2 čísla.

Položena 21/06/2017 v 03:25
uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Myslím, že budete potřebovat merges vnější spojení a parametrů indicator, pro filtrování použití locs boolean indexingak počtu stejných řadách sumboolean masky:

print (Dataframe1)
   C1 C2 C3
0   1  A  X
1   2  B  Y
2   2  C  Y

print (Dataframe2)
   C1 C2 C3
0   1  A  X
1   3  C  Z

df = pd.merge(Dataframe1, Dataframe2, indicator=True, how='outer')
print (df)
   C1 C2 C3      _merge
0   1  A  X        both
1   2  B  Y   left_only
2   2  C  Y   left_only
3   3  C  Z  right_only

both = (df['_merge'] == 'both').sum()
print (both)
1

left_only = df.loc[df['_merge'] == 'left_only', Dataframe1.columns]
print (left_only)
   C1 C2 C3
1   2  B  Y
2   2  C  Y

right_only = df.loc[df['_merge'] == 'right_only', Dataframe1.columns]
print (right_only)
   C1 C2 C3
3   3  C  Z
Odpovězeno 21/06/2017 v 04:18
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more