如何匹配code_file的id行值与data_1列名并合并两个DataFrame?
解决方案
根据你给出的输出示例,我们可以直接通过按行索引拼接的方式得到结果,代码如下:
import pandas as pd # 构造示例数据(实际使用时替换为你的真实数据) code_file = pd.DataFrame({ 'id': ['abc.1', 'abc.2', 'inc.type'], 'codevalue': ['021', '078', '7845'], 'descr': ['已采取行动', '搜救', '转运'] }) data_1 = pd.DataFrame({ 'state': ['FL', 'FL', 'FL'], 'inc.type': ['321', '781', '777'], 'abc.1': ['33', '59', '0154'], 'abc.2': ['44', '317', '441'], 'city': ['ORL', 'MIAMI', 'MIAMI'] }) # 按列拼接,将code_file的codevalue和descr列添加到data_1右侧 result = pd.concat([data_1, code_file[['codevalue', 'descr']]], axis=1) # 调整列顺序以匹配你要的输出格式 result = result[['state', 'inc.type', 'abc.1', 'abc.2', 'city', 'codevalue', 'descr']] print(result)
不过从你描述的“code_file中id列的数值与data_1的列名相匹配”这个条件来看,可能你的真实需求是要将每个编码列(abc.1、abc.2、inc.type)的编码值与code_file中的描述关联起来。如果是这样,可以先将data_1转为长格式,再与code_file合并,示例代码如下:
# 将data_1转为长格式,提取编码列的信息 melted_data = data_1.melt( id_vars=['state', 'city'], var_name='id', value_name='original_code' ) # 与code_file合并,关联描述信息 merged_data = pd.merge(melted_data, code_file, on='id') # 可选:转回宽格式(如果需要保留原列结构) final_data = pd.merge(merged_data, data_1, on=['state', 'city']) final_data = final_data[['state', 'inc.type', 'abc.1', 'abc.2', 'city', 'original_code', 'codevalue', 'descr']] print(final_data)
这段代码会生成包含每个编码列对应描述的长格式结果,你可以根据实际需求选择是否转回宽格式。
内容的提问来源于stack exchange,提问作者Nature Story
相关产品推荐
相关产品推荐

