如何为Pandas DataFrame符合条件的首/后续实例映射不同trade_type值
问题
我正在处理一个名为market_info_df的Pandas DataFrame,包含trade_type、issue_status、market_phase、trading_state四列。需要为trade_type应用如下映射逻辑:
- 当
issue_status=='10'、market_phase=='0'且trading_state==' '时,第一个满足该条件的实例的trade_type设为OPENING_AUCTION - 其余符合上述条件的实例,
trade_type设为INTRADAY_AUCTION
我尝试了以下代码,但无法正确实现逻辑:
market_info_df.loc[market_info_df['issue_status' == '10', 'market_phase' == '0', 'trading_state' == ' ']].iloc[0] = OPENING_AUCTION market_info_df.loc[market_info_df['issue_status' == '10', 'market_phase' == '0', 'trading_state' == ' ']].iloc[1:] = INTRADAY_AUCTION
预期效果示例:
row issue_status market_phase trading_state trade_type 0 20 0 ' ' -> CONTINUOUS_AUCTION 1 10 0 ' ' -> OPENING_AUCTION 2 20 0 ' ' -> CONTINUOUS_AUCTION 3 10 0 ' ' -> INTRADAY_AUCTION 4 10 0 ' ' -> INTRADAY_AUCTION 5 10 0 ' ' -> INTRADAY_AUCTION
解决方案
你的代码核心问题是布尔索引写法错误,同时直接修改切片会触发SettingWithCopyWarning,以下是正确实现步骤:
构造正确的筛选条件并获取匹配行索引
先准确定位所有满足三个条件的行:# 构造布尔条件 condition = (market_info_df['issue_status'] == '10') & \ (market_info_df['market_phase'] == '0') & \ (market_info_df['trading_state'] == ' ') # 获取符合条件的行索引 matching_indices = market_info_df[condition].index设置第一个匹配行的trade_type
若存在符合条件的行,将第一行标记为开盘集合竞价:if len(matching_indices) > 0: market_info_df.loc[matching_indices[0], 'trade_type'] = 'OPENING_AUCTION'设置剩余匹配行的trade_type
对剩下的符合条件行,标记为盘中集合竞价:if len(matching_indices) > 1: market_info_df.loc[matching_indices[1:], 'trade_type'] = 'INTRADAY_AUCTION'
通过以上步骤,可精准实现需求:仅第一个满足三条件的行被设为OPENING_AUCTION,其余同条件行设为INTRADAY_AUCTION,不满足条件的行保持原有trade_type不变。
内容的提问来源于stack exchange,提问作者user19667022
相关产品推荐
相关产品推荐

