1

我有一个包含流域 ID 和土地覆盖类别的表格:

WatershedID LandCover
          2      Corn
          8      Corn
          2       Soy
          8       Soy

和一个单独的查找表,其中包含每个流域/土地覆盖组合的面积:

WatershedID  Corn  Soy
          2    14    1
          3     2   14
          5    18    8
          7    21    2
          8     6   31

我想做的是将一列附加到包含查找表中相应行/列值的第一个表,如下所示:

WatershedID LandCover   Area
          2      Corn     14
          8      Corn      6
          2       Soy      1
          8       Soy     31

我已经设法通过使用 for 循环迭代来做到这一点:

areas = []
for watershed_id, land_cover in tableA.iterrows():
    areas.append(tableB.loc[watershed_id][land_cover]

但考虑到我桌子的大小,这很慢。有没有更快的方法来做到这一点而不涉及迭代?我一直在尝试使用 MultiIndexing 和数据透视表,但到目前为止没有任何效果。

4

1 回答 1

2

您可以unstack使用merge

df3 = df2.set_index('WatershedID').unstack().reset_index()
df3.columns = ['LandCover','WatershedID','Area']
print (df3)
  LandCover  WatershedID  Area
0      Corn            2    14
1      Corn            3     2
2      Corn            5    18
3      Corn            7    21
4      Corn            8     6
5       Soy            2     1
6       Soy            3    14
7       Soy            5     8
8       Soy            7     2
9       Soy            8    31

print (pd.merge(df1,df3))
   WatershedID LandCover  Area
0            2      Corn    14
1            8      Corn     6
2            2       Soy     1
3            8       Soy    31

如果有更多相同的列,您需要指定连接列:

print (pd.merge(df1,df3, on=['WatershedID','LandCover']))
   WatershedID LandCover  Area
0            2      Corn    14
1            8      Corn     6
2            2       Soy     1
3            8       Soy    31
于 2016-11-02T14:01:34.603 回答