如何用Pandas根据匹配键值在DataFrame中新增列
解决方法
我们可以通过将字符串格式的Bsps列转换为字典,再用Selection_id匹配对应数值的方式实现需求,以下是分步操作:
1. 构造示例DataFrame(替换成你自己的DataFrame即可)
import pandas as pd # 模拟你的数据结构 data = { 'Selection_id': [46660181, 40115397, 267698, 34774, 449342], 'Bsps': ['46660181: 2.1, 40115397: 1.75, 267698: 3.15, 34774: 2.64, 449342: 3.9'] * 5 } df = pd.DataFrame(data)
2. 把Bsps的字符串转成匹配用的字典
因为你的Bsps列所有行内容一致,只需要提取第一行处理即可:
# 取出第一行的Bsps原始字符串 bsp_raw = df['Bsps'].iloc[0] # 分割字符串并转换为字典(键转整数、值转浮点数,和Selection_id类型匹配) bsp_map = {} for pair in bsp_raw.split(', '): key_str, value_str = pair.split(': ') bsp_map[int(key_str)] = float(value_str)
3. 新增匹配列
用map方法快速完成Selection_id与字典值的匹配:
df['Bsp_Matched_Value'] = df['Selection_id'].map(bsp_map)
最终效果
运行后你的DataFrame会新增一列,内容就是每个Selection_id对应的数值:
Selection_id Bsps Bsp_Matched_Value 0 46660181 46660181: 2.1, 40115397: 1.75, 267698: 3.15, 3... 2.10 1 40115397 46660181: 2.1, 40115397: 1.75, 267698: 3.15, 3... 1.75 2 267698 46660181: 2.1, 40115397: 1.75, 267698: 3.15, 3... 3.15 3 34774 46660181: 2.1, 40115397: 1.75, 267698: 3.15, 3... 2.64 4 449342 46660181: 2.1, 40115397: 1.75, 267698: 3.15, 3... 3.90
内容的提问来源于stack exchange,提问作者Hancock
相关产品推荐
相关产品推荐

