988 Stimmen

Kombinieren Sie zwei Textspalten im Pandas-Datenrahmen

Ich habe ein 20 x 4000 DataFrame in Python mit pandas. Zwei dieser Spalten sind mit Jahr und Quartal benannt. Ich würde gerne eine Variable namens period erstellen, die aus Jahr = 2000 und Quartal = q2 2000q2 macht.

Kann mir jemand dabei helfen?

3voto

Ax_ Punkte 383

Beim Kombinieren von Spalten mit Zeichenfolgen durch Verketten mit dem Additionoperator + wird das gesamte Ergebnis zu NaN, wenn eines davon NaN ist. Verwenden Sie daher fillna()

df["join"] = "some" + df["col"].fillna(df["val_if_nan"])

2voto

Sergey Punkte 477

Man kann die assign-Methode von DataFrame verwenden:

df= (pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']}).
  assign(period=lambda x: x.Year+x.quarter ))

2voto

Ted Petrou Punkte 56706

Wie bereits von vielen erwähnt, müssen Sie jede Spalte in einen String konvertieren und dann den Plusoperator verwenden, um zwei Stringspalten zu kombinieren. Sie können eine erhebliche Leistungsverbesserung erzielen, indem Sie NumPy verwenden.

%timeit df['Year'].values.astype(str) + df.quarter
71.1 ms ± 3.76 ms pro Schleife (Mittelwert ± Standardabweichung von 7 Schleifen, 10 Schleifen insgesamt)

%timeit df['Year'].astype(str) + df['quarter']
565 ms ± 22.3 ms pro Schleife (Mittelwert ± Standardabweichung von 7 Schleifen, 1 Schleife insgesamt)

1voto

Ähnlich wie die Antwort von @geher, aber mit einem von Ihnen gewählten Trennzeichen:

SEP = " "
INPUT_COLUMNS_WITH_SEP = ",sep,".join(INPUT_COLUMNS).split(",")

df.assign(sep=SEP)[INPUT_COLUMNS_WITH_SEP].sum(axis=1)

0voto

Abul Punkte 195

Verwenden Sie .combine_first.

df['Period'] = df['Year'].combine_first(df['Quarter'])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X