[英]Use one .map call to change values for multiple Series/columns in dataframe using one dictionary
如果我有这样的数据框:
id latitude longitude
a -99 48
b -97 44
c -96 52
我有一本字典,将ID映射到新的纬度+经度值
new_lat_lon = { 'a':(-99, 58), 'b':(...), 'c':(...) }
有没有一种快速,肮脏的方法来使用.map一次更改纬度/经度列?
例如
df[['latitude', 'longitude']] = df['id'].map(new_lat_lon)
这当然行不通,但是如果有一种我想知道的方法。 我知道我可以将字典简单地分成两个单独的字典,但是我对是否有更紧凑的解决方案感兴趣。 如果我需要稍微修改一下字典(例如将元组更改为列表或其他内容),那也很酷,只要它是一部字典即可。 谢谢!
使用update
pd.DataFrame.from_dict(new_lat_lon,'index').rename(columns={0:'latitude',1:'longitude'})
Out[128]:
latitude longitude
a -99 58
b 1 2
c 2 3
updateddf=pd.DataFrame.from_dict(new_lat_lon,'index').rename(columns={0:'latitude',1:'longitude'})
df=df.set_index('id')
df.update(updateddf)
df.reset_index()
Out[132]:
id latitude longitude
0 a -99 58
1 b 1 2
2 c 2 3
您也可以使用str.get
解压缩
vals = df.id.map(d)
df.latitude, df.longitude = vals.str.get(0), vals.str.get(1)
请注意,如果id
中的所有值都在d
,则此方法有效
如果不是,可以做
vals =df.id.map(d).fillna(df[['latitude', 'longitude']].agg(tuple,1))
df.latitude, df.longitude = vals.str.get(0), vals.str.get(1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.