2017-08-23 28 views
0

這個問題可能很基本,但我想連接一個pandas DataFrame中的三列。
我想將col1,col2和col3連接到col4。我知道在R中這可以通過粘貼功能很容易地完成。在python數據框中連接行

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

編輯:代碼爲清楚 - 我想自動生成COL4:

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

回答

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

使用pd.DataFrame.sumaxis=1轉換爲字符串後。
我用pd.DataFrame.assign與新列

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 

創建一個副本,或者您也可以添加一列就地

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 

如果df只有三列,可以減少代碼

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

如果df有超過三列,但要Concat的三個單詞的前三個

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

總和字符串:) – Vaishali

+0

該解決方案在提供的代碼上工作,但在我的實際數據集上收到「錯誤的維度數」錯誤 – ktj1989

+0

這意味着您錯誤地表示了您的數據。另外,我不知道你的錯誤是什麼意思。您應該發佈整個錯誤以提供更多上下文。 – piRSquared

0

要跨所有列串連,它可能會更方便寫df.apply(..., axis=1),如:

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 

特別是如果你有很多列,並且不想全部寫出來(如凱爾答案所要求的那樣)。