首页 > 解决方案 > Python循环两个不同的数据帧以创建一个新列

问题描述

我想通过引用另一个数据框向数据框添加一个新列。

我想使用startswith方法运行一个if语句来匹配df1['BSI']列到df2['initial']来分配相应的df2['marker'],并给df1一个由标记组成的新列,我将用于 cartopy 标记样式。

我在 df1 循环中循环 df2 时遇到问题。我基本上不知道如何将 df1 项目调用到 df2 循环以与 df2 项目进行比较。

df1 看起来像这样:

    BSI     Shelter_Number  Location                            Latitude    Longitude
0   AA-010  1085            SUSSEX (N SIDE) & RIDEAU FALLS      45.439571   -75.695694
1   AA-030  3690            SUSSEX (E SIDE) & ALEXANDER NS      45.442795   -75.692322
2   AA-180  279             CRICHTON (E SIDE) & BEECHWOOD FS    45.439556   -75.676849
3   AA-200  2018            BEECHWOOD (S SIDE) & CHARLEVOIX NS  45.441154   -75.673622
4   AA-220  3301            BEECHWOOD (S SIDE) & MAISONNEUVE NS 45.442188   -75.671356

df2 看起来像这样:

    initial marker
0   AA      bo
1   AB      bv
2   AC      b^
3   AD      b<
4   AE      b>

所需的输出是:

BSI, Shelter_Number, Location, Latitude, Longitude, marker

0
AA-010 1085 SUSSEX (N SIDE) & RIDEAU FALLS 45.439571 -75.695694 bo

1
AA-030 3690 SUSSEX (E SIDE) & ALEXANDER NS 45.442795 -75.692322 bo

2
AA-180 279 CRICHTON (E SIDE) & BEECHWOOD FS 45.439556 -75.676849 bo

3
AA-200 2018 BEECHWOOD (S SIDE) & CHARLEVOIX NS 45.441154 -75.673622 bo

4
AA-220 3301 BEECHWOOD (S SIDE) & MAISONNEUVE NS 45.442188 -75.671356 bo

标签: pythonpandasloopsdataframe

解决方案


使用地图。事实上,使用 map 有很多类似的答案,但这里唯一的区别是您在 df1 中仅使用 BSI 的一部分进行匹配

df1['marker'] = df1['BSI'].str.extract('(.*)-', expand = False).map(df2.set_index('initial').marker)



    BSI     Shelter_Number  Location                            Latitude    Longitude   marker
0   AA-010  1085            SUSSEX (N SIDE) & RIDEAU FALLS      45.439571   -75.695694  bo
1   AA-030  3690            SUSSEX (E SIDE) & ALEXANDER NS      45.442795   -75.692322  bo
2   AA-180  279             RICHTON (E SIDE) & BEECHWOOD FS     45.439556   -75.676849  bo
3   AA-200  2018            BEECHWOOD (S SIDE) & CHARLEVOIX NS  45.441154   -75.673622  bo
4   AA-220  3301            BEECHWOOD (S SIDE) & MAISONNEUVE NS 45.442188   -75.671356  bo

推荐阅读