Erstellen neuer dataframe in pandas mit dynamische Namen auch neue Spalte hinzufügen

Ich habe einen dataframe df

 df = pd.DataFrame({'A':['-a',1,'a'], 
               'B':['a',np.nan,'c'],
               'ID':[1,2,2],
                't':[pd.tslib.Timestamp.now(),pd.tslib.Timestamp.now(),
                    np.nan]})

Hinzugefügt eine neue Spalte

df['YearMonth'] = df['t'].map(lambda x: 100*x.year + x.month)

Möchte ich nun schreiben Sie eine Funktion oder ein makro, die das Datum comparasion, erstellen Sie ein neues dataframe auch hinzufügen einer neuen Spalte zu dataframe.

Habe ich versucht, aber scheint, ich bin schief:

def test(df,ym):
    df_new=df
    if(ym <= df['YearMonth']):
        df_new+"_"+ym=df_new
        return df_new+"_"+ym
    df_new+"_"+ym['new_col']=ym

Wenn ich jetzt nennen-test-Funktion, ich will ein neues dataframe sollte erstellt werden mit dem Namen wie df_new_201612 und diese neuen dataframe sollte eine weitere Spalte mit dem Namen als new_col hat Wert ym für alle Zeilen.

test(df,201612)

Die Ausgabe von neuen dataframe ist:

df_new_201612

A   B   ID  t                           YearMonth   new_col
-a  a   1   2016-12-05 12:37:56.374620  201612      201612 
1   NaN 2   2016-12-05 12:37:56.374644  201208      201612 
a   c   2   nat                         nan         201612 
  • Ihr code ist nicht gültig python - die Linie df_new+"new"+ym['new_col']=ym wirft einen SnytaxError. Auch denke ich nicht, dass return df_new+"_"+ym tut, was Sie denken, es tut.
  • ich weiß, ich bin etwas falsch zu machen. Bitte lassen Sie mich wissen, wenn Sie einige Idee, oben in pandas
  • hat jemand wissen, wie man mit nan ... unter Lösung funktioniert, wenn ich nicht haben kein nan-Wert in YearMonth. Wie Sie bekommen es getan, wenn wir nan zu ?
  • df.dropna() übernimmt das für Sie - überprüfen Sie die pandas docs für mehr
InformationsquelleAutor user07 | 2016-12-05
Schreibe einen Kommentar