将两个数值数据框列合并为一个元组列

3
我想创建一个新列,将两个列组合在一起。我在互联网上搜寻了一下,但没有找到任何有用的信息。如何操作:
例如:
A B
50.631456 5.57871    

C
(50.631456, 5.57871)

你想像在C语言中一样将2列合并成1列吗?看这个链接:https://dev59.com/cWcs5IYBdhLWcg3w0HOz 在Series中放置你的数据。 - Lukasz
你想将两个(数字?)列合并为一个包含Python元组的列,是吗?(不是字符串) - smci
顺便说一下,如果你想在数据框中有(lat, long)元组对象,这并不是一个好主意。任何处理它们的函数都必须对它们进行特殊处理。最好是在写csv/ export/ pickle数据框时转换为元组。 - smci
1
@ThibaultMambour,以下解决方案之一是否解决了您的问题?如果是,请考虑接受答案(左侧的绿色勾号),以便其他用户知道。 - jpp
3个回答

6

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

4
请查看 DataFrame.apply
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
你可以使用 apply。
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接