2017-07-11 3 views
2

Um Änderungen an mehreren DataFrames zu handhaben, habe ich einen Code, der funktioniert, aber ich möchte seine Effizienz verbessern.Umgang mit doppelten for-Schleifen mit Python Pandas

Ich bin sicher, dass es eine bessere Lösung für dieses Problem gibt.

In [1]: import pandas as pd 

In [1]: df = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B']) 

In [2]: df 

Out[2]: 
     A B 
    0 1 2 
    1 1 3 
    2 4 6 

In [1]: df2 = pd.DataFrame([[1, 1], [1, 1], [1, 1]], columns=['C', 'D']) 

In [2]: df2 

Out[2]: 
     C D 
    0 1 1 
    1 1 1 
    2 1 1 

In der Tat Werte zu identifizieren und in Abhängigkeit von einer Gleichheit beispielsweise zu ersetzen, verwende ich doppelt für llop Dataframes durchsuchen:

for i in range(0, df['A'].size): 
    for j in range(0, df2['C'].size): 
     if df.loc[i,'A'] == df2.loc[j, 'C'] : 
      df2.loc[j, 'C'] = df.loc[i,'B'] 
     else : 
      pass 
In [2]: df2 

Out[2]: 
     C D 
    0 2 1 
    1 3 1 
    2 1 1 

Aktion ist wirklich einfach, aber ist nicht geeignet für die Verarbeitung großer Datenrahmen, vielen Dank im Voraus

EDIT: die Dataframes sind nicht notwendigerweise die gleiche Größe

+0

wie würden Sie die Daten zu handhaben wie die minimale Größe überschreitet? –

Antwort

1

ich davon aus, dass ich Sie Datenrahmen gleicher Größe, in diesem Fall

df2.loc[df2['C'] == df['A'], 'C'] = df['B'] 

Sie erhalten sind Handling

C D 
0 2 1 
1 3 1 
2 1 1 
+0

Danke! Mein Fehler, ich habe nicht erwähnt, dass die Datenrahmen nicht unbedingt die gleiche Größe haben :) –

+0

Also würden Sie die Werte vergleichen, bis die Datenrahmengrößen übereinstimmen und dann den Rest der Zeilen ignorieren? – Vaishali

+0

Ich möchte nur zwei Spalten vergleichen, die nicht die gleiche Größe haben, den passenden Index erhalten und ein Feld entsprechend diesem Index modifizieren –

Verwandte Themen