如何匹配DataFrame索引与列值,更新目标列对应值?
问题描述
现有两个DataFrame:
df1
Count Duliajan Area 2 HAPJAN 2 KATHALGURI 2
df2
Location Category 0 NAGAJAN 0 1 JORAJAN 0 2 KATHALGURI 0 3 HEBEDA 0 4 MAKUM 0 5 BAREKURI 0 6 BAGHJAN 0 7 Duliajan Area 0 8 LANGKASHI 0 9 HAPJAN 0
需求:将df2中Location列的值与df1的索引匹配时,把对应行的Category列值替换为df1的Count值,其余行保持Category值为0,得到如下结果:
Location Category 0 NAGAJAN 0 1 JORAJAN 0 2 KATHALGURI 2 3 HEBEDA 0 4 MAKUM 0 5 BAREKURI 0 6 BAGHJAN 0 7 Duliajan Area 2 8 LANGKASHI 0 9 HAPJAN 2
实现方法
方法1:使用map结合fillna
利用map方法将df2的Location映射到df1的Count值,再用fillna处理未匹配项:
df2['Category'] = df2['Location'].map(df1['Count']).fillna(0).astype(int)
map会根据Location的值匹配df1的索引,返回对应Count;未匹配项返回NaN,用fillna(0)替换为0,最后转成整数保证格式一致。
方法2:使用replace
先将df1的索引与Count转为字典,再批量替换:
replace_dict = df1['Count'].to_dict() df2['Category'] = df2['Location'].replace(replace_dict).fillna(0).astype(int)
to_dict()生成以df1索引为键、Count为值的字典;replace会替换Location中匹配字典键的项,未匹配项用fillna(0)处理后转成整数。
方法3:使用merge
通过左连接合并两个DataFrame,再填充缺失值:
merged_df = df2.merge(df1, left_on='Location', right_index=True, how='left') df2['Category'] = merged_df['Count'].fillna(0).astype(int)
左连接保留df2所有行,合并后Count列未匹配项为NaN,填充0后赋值给Category列即可。
内容的提问来源于stack exchange,提问作者venkateswaran
相关产品推荐
相关产品推荐

