在Pandas中,如何将两列合并为另一列?

3
任何帮助都将不胜感激。这很容易,但我是Python的新手。
我想添加两列,即纬度和经度,并将其放入名为“位置”的列中。
例如:
纬度的第一行将有一个值为41.864073,而经度的第一行将有一个值为-87.706819。
我希望'Locations'列显示41.864073,-87.706819。
拜托了。

嗨,比尔。看起来你得到了很多答案。如果问题已经解决,我们将不胜感激地希望您选择其中一个答案作为被接受的答案。谢谢! - timgeb
4个回答

2

我对这一列的有用性表示怀疑,但你可以通过在列上应用tuple可调用函数来生成它。

>>> df = pd.DataFrame([[1, 2], [3,4]], columns=['lon', 'lat'])
>>> df
>>> 
   lon  lat
0    1    2
1    3    4
>>> 
>>> df['Location'] = df.apply(tuple, axis=1)
>>> df
>>> 
   lon  lat Location
0    1    2   (1, 2)
1    3    4   (3, 4)

如果您的数据框中除了'lon''lat'之外还有其他列,请使用:
df['Location'] = df[['lon', 'lat']].apply(tuple, axis=1)

抱歉,我应该提到我还有其他列。当我尝试你建议的方法时,它把其他列也加到了位置中。有什么办法可以专门连接经度和纬度吗? - Bill Carson

2

设置

df = pd.DataFrame(dict(lat=range(10, 20), lon=range(100, 110)))

zip

使用 zip 应该比使用 apply 更好。

df.assign(location=[*zip(df.lat, df.lon)])

   lat  lon   location
0   10  100  (10, 100)
1   11  101  (11, 101)
2   12  102  (12, 102)
3   13  103  (13, 103)
4   14  104  (14, 104)
5   15  105  (15, 105)
6   16  106  (16, 106)
7   17  107  (17, 107)
8   18  108  (18, 108)
9   19  109  (19, 109)

list 变量类型

虽然我仍然建议使用 tuple

df.assign(location=df[['lat', 'lon']].values.tolist())

   lat  lon   location
0   10  100  [10, 100]
1   11  101  [11, 101]
2   12  102  [12, 102]
3   13  103  [13, 103]
4   14  104  [14, 104]
5   15  105  [15, 105]
6   16  106  [16, 106]
7   17  107  [17, 107]
8   18  108  [18, 108]
9   19  109  [19, 109]

“这应该比使用apply更好。” <- 你能解释一下吗?个人认为apply更易读,是否存在性能问题或其他我所忽略的问题? - timgeb
“apply”非常直观,因此非常棒。因此,如果性能不是问题,它是一个很好的解决方案。然而,“apply”可能存在性能问题。我尽量避免在每个问题和答案中使用性能砝码,但我确实试图避免在我的答案中使用“apply”。但我必须承认,在某些情况下,它使答案更加优雅。就个人而言,我喜欢zip。它是语言的核心组件,值得理解,以便它也变得“可读”。 - piRSquared

2

Pir的数据

df['New']=tuple(zip(*df[['lat','lon']].values.T))
df
Out[106]: 
   lat  lon        New
0   10  100  (10, 100)
1   11  101  (11, 101)
2   12  102  (12, 102)
3   13  103  (13, 103)
4   14  104  (14, 104)
5   15  105  (15, 105)
6   16  106  (16, 106)
7   17  107  (17, 107)
8   18  108  (18, 108)
9   19  109  (19, 109)

0

我从W-B和timgeb那里学到了一些东西。我的想法是将它们转换为字符串并连接起来。我发布了我的答案,以防您希望将结果作为字符串返回。否则,似乎上面的答案是正确的。

import pandas as pd
from pandas import *  

Dic = {'Lattitude': [41.864073], 'Longitude': [-87.706819]}
DF = pd.DataFrame.from_dict(Dic)
DF['Location'] = DF['Lattitude'].astype(str) + ',' +  DF['Longitude'].astype(str)

感谢分享。 - Bill Carson
OP没有说明他们需要创建一个新的数据框。我不建议你提出的方法。你正在创建2个字典,然后再将它们合并成2个数据框。这是不必要的。然而,其他答案都没有提到实际上作为字符串连接。这是一个有效的解释,但你为了很少的好处而进行了很多类型转换。我建议坚持使用元组。 - piRSquared
我明白你的意思,piRSquared。创建两个字典和两个数据框是为了达到我认为 OP 开始的地方。我更新了我的帖子,创建了一个字典和一个数据框。我同意你的解决方案更加优雅……只是用我学到的工具试着解决它。 - TonyRyan

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