2016-08-04 7 views
2

Ich bin neu in der Programmierung und Python schreiben, und möchte das folgende Stück Code als Funktion der ‚def‘ ‚Return‘ Konstruktion mit schreiben:Wie eine Konstruktion Code als Funktion

df.loc[df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1, 'CONSECUTIVE_DAY'] = True 
df.loc[(df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1) | (df['DATE_INT'].shift(1) - df['DATE_INT'] == -1), 'CONSECUTIVE_DAY'] = True 

Mein Versuch liefert ungültige Syntax:

def ConsecutiveID(df, column ='DATE_INT'): 
    return df.loc[df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1, 'CONSECUTIVE_DAY'] = True 
      df.loc[(df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1) | (df['DATE_INT'].shift(1) - df['DATE_INT'] == -1), 'CONSECUTIVE_DAY'] = True 

Mein Ziel ist es letztlich meine ConsecutiveID Funktion wie folgt zu verwenden:

df.groupby(['COUNTY_GEOID_YEAR','TEMPBIN']).apply(ConsecutiveID) 

Ich verwende die Split-Apply-Mähdrescher-Konstruktion. Wo growby meine Daten aufteilt, verwende ich die Funktion, die ich in apply konstruieren möchte.

Meine Hauptfrage ist, wie man schreibt, was ich die ConsecutiveID als eine Funktion genannt habe. Danke für jede Hilfe.

+1

Verwenden Sie nicht 'return',' df' wird immer noch in der Funktion aktualisiert. Beachten Sie, dass die meisten Pandas-Funktionen 'inplace = true' benötigen, um den df tatsächlich zu aktualisieren. – Julien

+1

Nach den beiden Anweisungen geben Sie einfach das 'df' zurück. – shivsn

+0

@JulienBernu - Tolles Dankeschön, das hat den Syntaxfehler gelöst .. Andere Probleme beim Anwenden der Funktion. Danke für die Hilfe! – Justin

Antwort

1
def ConsecutiveID(df): 
    df = df.copy() 
    cond1 = df['DATE_INT'].shift(-1) - df['DATE_INT'] == 1 
    cond2 = df['DATE_INT'].shift(1) - df['DATE_INT'] == -1 

    df.loc[cond1 | cond2, 'CONSECUTIVE_DAY'] = True 

    return df 
Verwandte Themen