我有一张土地覆盖率表和州的站点表。我有另一个表,其值链接到类和状态。但是,在第二个表中,某些行仅链接到类:
sites = pd.DataFrame({'id': ['a', 'b', 'c'],
'class': [1, 2, 23],
'state': ['al', 'ar', 'wy']})
values = pd.DataFrame({'class': [1, 1, 2, 2, 23],
'state': ['al', 'ar', 'al', 'ar', None],
'val': [10, 11, 12, 13, 16]})
我想按类和状态链接表,但值表中那些状态为None的行除外,在这种情况下,它们仅按类链接。
合并具有以下结果:
combined = sites.merge(values, how='left', on=['class', 'state'])
id class state val
0 a 1 al 10.0
1 b 2 ar 13.0
2 c 23 wy NaN
但是我希望将最后一行的val设为16。是否有一种廉价的方法来做到这一点,只需分解两个表,执行单独的合并,然后将结果串联起来?
最佳答案
如何分别合并它们:
pd.concat([sites.merge(values, on=['class','state']),
sites.merge(values[values['state'].isna()].drop('state',axis=1),
on=['class'])
])
输出:
id class state val
0 a 1 al 10
1 b 2 ar 13
0 c 23 wy 16
关于python - Pandas 在可变列上合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59395161/