Python 如果列值为“foo”,是否在同一行上附加具有新值的dataframe?
我有一个包含国家名称的数据框,我想把每个国家首都的坐标加在后面 我用所有坐标创建了一个dict,格式如下: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,我将在其
{'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也同样快。我真诚地感谢你的帮助!