Python 如果列值为“foo”,是否在同一行上附加具有新值的dataframe?

Python 如果列值为“foo”,是否在同一行上附加具有新值的dataframe?,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我有一个包含国家名称的数据框,我想把每个国家首都的坐标加在后面 我用所有坐标创建了一个dict,格式如下: {'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,格式如下:

{'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中出现很多次,大约有30000个条目,因此我担心这会造成一些开销。我是新来的熊猫,所以我可能会错过一个内置的功能,可以很好地与此配合

你有没有想过最好的方法


提前感谢

通过索引[0]和[1]选择元组的第一个和第二个值,使用2个dict理解:


通过索引[0]和[1],使用2个dict理解,并选择元组的第一个和第二个值:


除了上述解决方案之外,还可以使用iloc

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

d = pd.DataFrame(d) 
print(d)

    Czech Republic  Zimbabwe    Hungary Nigeria
0   14.421254   31.045686   19.040471   7.489297
1   50.087465   -17.831773  47.498382   9.064331

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

df['LAT'] = df['COUNTRY'].map(d.iloc[0]) 
df['LON'] = df['COUNTRY'].map(d.iloc[1])

print(df)

  COUNTRY     LAT         LON
0 Zimbabwe    31.045686   -17.831773 
1 Hungary     19.040471   47.498382 
2 Slovakia    NaN         NaN

除了上述解决方案之外,还可以使用iloc

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

d = pd.DataFrame(d) 
print(d)

    Czech Republic  Zimbabwe    Hungary Nigeria
0   14.421254   31.045686   19.040471   7.489297
1   50.087465   -17.831773  47.498382   9.064331

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

df['LAT'] = df['COUNTRY'].map(d.iloc[0]) 
df['LON'] = df['COUNTRY'].map(d.iloc[1])

print(df)

  COUNTRY     LAT         LON
0 Zimbabwe    31.045686   -17.831773 
1 Hungary     19.040471   47.498382 
2 Slovakia    NaN         NaN

在你回答之前,我几乎无法眨眼,使用你展示的方法,将坐标添加到df也同样快。我真诚地感谢你的帮助!在你回答之前,我几乎无法眨眼,使用你展示的方法,将坐标添加到df也同样快。我真诚地感谢你的帮助!