这个问题可能非常基础,但我想在pandas DataFrame中连接三列。
我想将col1,col2和col3连接成col4。我知道在R中可以很容易地使用粘贴功能。
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 :(得分:3)
转换为字符串后,将pd.DataFrame.sum
与axis=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
有三列以上但你要连接的三列是前三列
df.assign(col4=df.iloc[:, :3].astype(str).sum(1))
答案 1 :(得分:0)
df['col4'] = df.col1.astype(str) + df.col2 + df.col3.astype(str)
答案 2 :(得分: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
特别是如果你有很多专栏并且不想全部写出来(按照凯尔的答案要求)。