我想创建一个将2列组合在一起的新列。我查看了互联网,但一无所获。我该怎么办:
前:
A B
50.631456 5.57871
C
(50.631456, 5.57871)
答案 0 :(得分:3)
df = pd.DataFrame(np.random.randint(0, 10, (6, 2)), columns=['a', 'b'])
df['c'] = df.apply(tuple, axis=1)
df
返回
a b c
0 8 1 (8, 1)
1 3 3 (3, 3)
2 2 8 (2, 8)
3 6 2 (6, 2)
4 2 2 (2, 2)
5 8 5 (8, 5)
答案 1 :(得分:2)
list
+ zip
是一种有效的方式:
df['C'] = list(zip(df.A, df.B))
# A B C
# 0 50.631456 5.57871 (50.631456, 5.57871)
<强>性能强>
正如预期的那样,df.apply
方法对于大型数据帧来说是循环且低效的,尤其是与lambda
结合使用时。
df = pd.concat([df]*10000)
%timeit list(zip(df.A, df.B)) # 3.14ms
%timeit df.apply(tuple, axis=1) # 378ms
%timeit df.apply(lambda x: (x.A,x.B), axis=1) # 577ms
答案 2 :(得分:1)
你可以使用申请。
df = pd.DataFrame({'A': {0: 50.631456}, 'B': {0: 5.57871}})
df
Out[162]:
A B
0 50.631456 5.57871
df['C'] = df.apply(lambda x: (x.A,x.B), axis=1)
df
Out[155]:
A B C
0 50.631456 5.57871 (50.631456, 5.57871)