繁体   English   中英

使用一个.map调用使用一个字典更改数据框中的多个系列/列的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM