我有一个ID为ID的Pandas DataFrame stations
:
id station lat lng
1 Boston 45.343 -45.333
2 New York 56.444 -35.690
我有另一个具有以下内容的DataFrame df1
:
duration date station gender
NaN 20181118 NaN M
9 20181009 2.0 F
8 20170605 1.0 F
我想添加到df1
中,使其看起来像下面的DataFrame:
duration date station gender lat lng
NaN 20181118 NaN M nan nan
9 20181009 New York F 56.444 -35.690
8 20170605 Boston F 45.343 -45.333
我尝试通过参考下面的示例中的station.iloc[]
来迭代地执行此操作,但是我大约有200万行,并且这花了很多时间。
stat_list = []
lng_list []
lat_list = []
for stat in df1:
if not np.isnan(stat):
ref = station.iloc[stat]
stat_list.append(ref.station)
lng_list.append(ref.lng)
lat_list.append(ref.lat)
else:
stat_list.append(np.nan)
lng_list.append(np.nan)
lat_list.append(np.nan)
有更快的方法吗?
答案 0 :(得分:1)
看起来最好通过合并来解决,这应该可以大大提高性能:
df1.merge(stations, left_on="station", right_index=True, how="left")
如果您只希望其中包含字符串名称的桩号列,则会留下两列station_x
和station_y
:
df_merged = df1.merge(stations, left_on="station", right_index=True, how="left", suffixes=("_x", ""))
df_final = df_merged[df_merged.columns.difference(["station_x"])]
(或在合并之前重命名其中之一)