Vergleiche df1 Spalte 1 zu allen Spalten in df2 Rückgabe des Index von df2

Ich bin neu in Pandas so wahrscheinlich mit Blick auf etwas, aber ich habe gesucht und habe noch nichts hilfreich gefunden.

Was ich versuche zu tun ist das. Ich habe 2 dataframes df1 hat nur 1 Spalte und eine unbekannte Anzahl von Zeilen. df2 hat auch eine unbekannte Anzahl von Zeilen und auch eine unbekannte Anzahl von Spalten für jeden Index.

 Example: df1: 0 1117454 1 1147637 2 1148945 3 1149662 4 1151543 5 1151545 6 1236268 7 1236671 8 1236673 ... 300 1366962 df2: 1 2 3 4 5 6 7 8302813476 1375294 1375297 1375313 1375318 1375325 1375330 1375331 8302813477 1317422 1363270 1363288 1363262 None None None 8302813478 1187269 1187276 1149662 1147843 1147639 1236650 1236656 

Also, was ich will, ist, alle df1 Werte gegen df2 Spalte 1 – n zu überprüfen und wenn es eine Übereinstimmung mit jedem Wert in df1 markieren den Index von df2 als True sonst ist es False.

2 Solutions collect form web for “Vergleiche df1 Spalte 1 zu allen Spalten in df2 Rückgabe des Index von df2”

Ich denke, Sie können isin um das Matching der Series df2 die von df2 von stack mit der Series erstellt wurde, die aus einer Spalte df1 durch squeeze . Letzte Umgestaltung von unstack :

 df3 = df2.stack().isin(df1.squeeze()).unstack() print (df3) 1 2 3 4 5 6 7 8302813476 False False False False False False False 8302813477 False False False False False False False 8302813478 False False True False False False False 

Dann finden Sie alle Werte, wo mindestens ein True von any :

 a = df3.any(axis=1) print (a) 8302813476 False 8302813477 False 8302813478 True dtype: bool 

Und letzte boolean indexing :

 print (a[a].index) Int64Index([8302813478], dtype='int64') 

Eine andere Lösung ist stattdessen squeeze use df1['col'].unique() , danke Ted Petrou :

 df3 = df2.stack().isin(df1['col'].unique()).unstack() print (df3) 1 2 3 4 5 6 7 8302813476 False False False False False False False 8302813477 False False False False False False False 8302813478 False False True False False False False 

Ich mag squeeze mehr, aber gleiche Ausgabe ist einfach Auswahl Spalte von df1 :

 df3 = df2.stack().isin(df1['col']).unstack() print (df3) 1 2 3 4 5 6 7 8302813476 False False False False False False False 8302813477 False False False False False False False 8302813478 False False True False False False False 

Als interessante, neidige Alternative

 l1 = df1.values.ravel() l2 = df2.values.ravel() pd.DataFrame( np.equal.outer(l1, l2).any(0).reshape(df2.values.shape), df2.index, df2.columns ) 

Oder mit set , list und Verständnis

 l1 = set(df1.values.ravel().tolist()) l2 = df2.values.ravel().tolist() pd.DataFrame( np.array([bool(l1.intersection([d])) for d in l2]).reshape(df2.values.shape), df2.index, df2.columns ) 

Bildbeschreibung hier eingeben

  • Pandas: Bar-Plot mit multiIndex Dataframe
  • ValueError: zu viele Werte zum Auspacken bei Verwendung von itertuples () auf pandas dataframe
  • Streuung der Werte in pandas dataframe
  • Pandas Spalte wandeln Währung zu float
  • Pandas werden nicht füllen
  • Pandas fügen einen Tag zu Spalte hinzu
  • Python pandas dataframe groupby Auswahl von Spalten
  • TypeError: Argument des Typs 'float' ist nicht iterable
  • Cx_freeze schafft keine exe mit pandas library
  • In Pandas, was ist das Äquivalent von 'nrows' von read_csv () in read_excel () verwendet werden?
  • Pandas Downsampling Ausgabe
  • Python ist die beste Programmiersprache der Welt.