从另一个DataFram逐行将新列映射到DataFrame

2024-04-19 17:01:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个索引为id的熊猫数据帧stations

id    station     lat     lng
1     Boston      45.343  -45.333
2     New York    56.444  -35.690

我有另一个数据帧df1,它具有以下内容:

duration   date       station   gender
NaN        20181118   NaN       M
9          20181009   2.0       F
8          20170605   1.0       F

我想添加到df1,使其看起来像以下数据帧:

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)

有没有更快的方法


Tags: 数据refidnewnpnanbostonstat
1条回答
网友
1楼 · 发布于 2024-04-19 17:01:46

看起来这最好通过合并来解决,合并将显著提高性能:

df1.merge(stations, left_on="station", right_index=True, how="left")

这将为您留下两列station_xstation_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"])]

(或者在合并之前重命名其中一个)

相关问题 更多 >