python - 通过另一个 DataFrame 中的行将新列映射到 DataFrame

标签 python pandas performance numpy dataframe

我有一个 Pandas DataFrame stations,索引为 id:

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)

有没有更快的方法来做到这一点?

最佳答案

看起来这个问题最好通过合并来解决,这应该会显着提高性能:

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"])]

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

关于python - 通过另一个 DataFrame 中的行将新列映射到 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53466038/

相关文章:

python - 将 SciPy 层次树状图切割成多个阈值的簇

python - 根据列名为 NetworkX 节点分配颜色

python - 如何在 python 中选择多个列

c++ - CSV 解析器的性能瓶颈

entity-framework - 创建 1000 个 Entity Framework 对象时,何时应该调用 SaveChanges()? (就像导入期间一样)

c# - 如何使用复合键索引集合

python - 如何从文本文件中求解简单的数学方程

python - 如何使用 AJAX 将图像上传到 Google 云存储?

python - 索引出现最接近的 5 个索引列表

python - 创建一个新列拉入值,其中值等于列名