Pandas lookup/pivot 使用列标题

Pandas lookup/pivot using column headings

我有一个 table 包含流域 ID 和土地覆盖 类:

WatershedID LandCover
          2      Corn
          8      Corn
          2       Soy
          8       Soy

和一个单独的查找 table,其中包含每个 watershed/land 封面组合的区域:

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

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

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]

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

您可以使用 unstack with 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