首页 > 解决方案 > 如果列值为“foo”,则在同一行上附加具有新值的数据框?

问题描述

我有一个包含国家名称的数据框,我想将其附加到每个国家/地区首都的坐标。

我创建了一个包含所有坐标的字典,其格式如下:

{'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773), 
'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}

我有一个数据框,其中有一列是“COUNTRY”,并且希望有两个新列“LAT”、“LON”,我将在其中存储坐标。我尝试将 dict 直接转换为数据框,但它没有按我想要的那样工作。

是否可行创建一个带有两列“LAT”,“LON”的空df,将其与原始df合并然后遍历它,检查国家并一一添加坐标,或者有更好的方法吗? ?

一个国家可以在 df 中出现很多次,大约有 30k 个条目,所以我担心它会造成一些开销。我是 Pandas 的新手,所以我可能会缺少一个可以很好地使用它的内置功能。

您对解决此问题的最佳方法有任何想法吗?

提前致谢

标签: pythonpandasdataframemerge

解决方案


[0]使用 2 dict comprehensions 通过索引和[1]with选择元组的第一个和第二个值map

d = {'Czech Republic': (14.4212535, 50.0874654), 'Zimbabwe': (31.045686, -17.831773), 
'Hungary': (19.0404707, 47.4983815), 'Nigeria': (7.4892974, 9.0643305)}

df = pd.DataFrame({'COUNTRY':['Zimbabwe','Hungary', 'Slovakia']})

df['LAT'] = df['COUNTRY'].map({k:v[0] for k, v in d.items()})
df['LON'] = df['COUNTRY'].map({k:v[1] for k, v in d.items()})
print (df)
    COUNTRY        LAT        LON
0  Zimbabwe  31.045686 -17.831773
1   Hungary  19.040471  47.498382
2  Slovakia        NaN        NaN

推荐阅读