2017-08-23 2 views
0

Diese Frage mag sehr einfach sein, aber ich würde gerne drei Spalten in einem Pandas DataFrame verketten.
Ich möchte col1, col2 und col3 in col4 verketten. Ich weiß in R dies konnte mit der Paste-Funktion ziemlich leicht gemacht werden.Zeilen in Python-Dataframe verketten

df = pd.DataFrame({'col1': [2012, 2013, 2014], 'col2': 'q', 'col3': range(3)}) 

bearbeiten: Code für Klarheit - Ich mag würde col4 automatisch generieren:

x=pd.DataFrame() 
x['col1'] = [2012,2013,2013] 
x['col2'] = ['q', 'q', 'q'] 
x['col3'] = [1,2,3] 
x['col4'] = ['2012q1', '2013q2', '2014q4'] 

Antwort

0
df['col4'] = df.col1.astype(str) + df.col2 + df.col3.astype(str) 
3

Verwendung pd.DataFrame.sum mit axis=1 nach in Strings konvertiert werden.
Ich benutze pd.DataFrame.assign eine Kopie mit der neuen Spalte

df.assign(col4=df[['col1', 'col2', 'col3']].astype(str).sum(1)) 

    col1 col2 col3 col4 
0 2012 q  1 2012q1 
1 2013 q  2 2013q2 
2 2014 q  3 2014q3 

Oder Sie fügen inplace eine Spalte

df['col4'] = df[['col1', 'col2', 'col3']].astype(str).sum(1) 
df 

    col1 col2 col3 col4 
0 2012 q  1 2012q1 
1 2013 q  2 2013q2 
2 2014 q  3 2014q3 

Wenn df nur die drei Spalten können zu erstellen, geben Sie den Code reduzieren

df.assign(col4=df.astype(str).sum(1)) 

Wenn df hat mehr als drei Spalten, aber die drei, die Sie verketten wollen, sind die ersten drei

df.assign(col4=df.iloc[:, :3].astype(str).sum(1)) 
+0

Summe auf Strings :) – Vaishali

+0

Diese Lösung arbeitete auf den Code, der zur Verfügung gestellt wurde, aber auf meinem tatsächlichen Datensatz erhielt eine "Falsche Anzahl von Dimensionen" Fehler – ktj1989

+0

Das bedeutet, dass Sie Ihre Daten falsch dargestellt. Außerdem habe ich keine Ahnung was dein Fehler bedeutet. Sie sollten den gesamten Fehler veröffentlichen, um mehr Kontext bereitzustellen. – piRSquared

0

über alle Spalten zu verketten, kann es bequemer sein df.apply(..., axis=1) zu schreiben, wie in:

df['col4'] = df.apply(lambda x: "".join(x.astype(str)),axis=1) 
df 

# col1 col2 col3 col4 
#0 2012 q  1 2012q1 
#1 2013 q  2 2013q2 
#2 2014 q  3 2014q3 

vor allem, wenn Sie viele Spalten haben und nicht alle aufschreiben wollen (wie von Kyle's Antwort gefordert).

Verwandte Themen