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