使用列标题查找/转动Pandas

时间:2016-11-02 13:56:18

标签: python pandas numpy numpy-broadcasting

我有一张包含分水岭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和数据透视表,但到目前为止还没有任何工作。

1 个答案:

答案 0 :(得分: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