You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决pandas中基于两列组合与字典映射生成新列的哈希错误

修复Pandas字典映射生成新列的TypeError问题

错误原因

  1. 条件判断错误:直接用market_info_df['is_and_mp'] in no_collision_issue_status无法对Series做批量判断,Pandas中需用isin()方法实现序列元素的批量匹配。
  2. 字典键类型错误:(market_info_df['issue_status'], market_info_df['trading_state'])是两个Series对象,属于不可哈希类型,不能作为字典的键来取值。

修复方案

步骤1:构建正确的过滤掩码

先生成符合条件的布尔掩码,筛选需要处理的行:

mask = market_info_df['is_and_mp'].isin(no_collision_issue_status) | (market_info_df['trading_state'] != '  ')

步骤2:生成可哈希元组并映射字典

将符合条件行的issue_status和trading_state组合成元组(可哈希类型),再通过map方法匹配字典值:

# 把指定列组合成元组序列
state_tuples = market_info_df.loc[mask, ['issue_status', 'trading_state']].apply(tuple, axis=1)
# 映射字典值到新列
market_info_df.loc[mask, 'market_state'] = state_tuples.map(MARKET_STATES_DICT)

补充说明

如果MARKET_STATES_DICT中存在三元组键(如('100', ' ', 'F')),需要将对应的第三个字段(比如market_phase)也加入元组生成:

state_tuples = market_info_df.loc[mask, ['issue_status', 'trading_state', 'market_phase']].apply(tuple, axis=1)
market_info_df.loc[mask, 'market_state'] = state_tuples.map(MARKET_STATES_DICT)

完整代码示例

# 构建过滤掩码
mask = market_info_df['is_and_mp'].isin(no_collision_issue_status) | (market_info_df['trading_state'] != '  ')

# 生成元组序列并映射字典值
state_tuples = market_info_df.loc[mask, ['issue_status', 'trading_state']].apply(tuple, axis=1)
market_info_df.loc[mask, 'market_state'] = state_tuples.map(MARKET_STATES_DICT)

内容的提问来源于stack exchange,提问作者user19667022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:35:21