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,但到目前为止没有任何效果。
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
我有一个 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,但到目前为止没有任何效果。
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