Python中Pandas DataFrame随机交换玩家列数据及生成target字段问题
解决方案
核心思路
先随机生成布尔掩码标记需要交换的行,再针对这些行交换player1/player2相关列,最后根据掩码设置target字段。
具体实现代码
1. 导入依赖
import pandas as pd import numpy as np
2. 生成随机交换掩码
设置需要交换的行比例(示例为30%),生成对应掩码:
# swap_mask为True的行将被交换,可调整p参数改变交换比例 swap_mask = np.random.choice([True, False], size=len(df), p=[0.3, 0.7])
3. 交换player1/player2相关数据
- 如果仅需交换
player1和player2两列:
# 对掩码标记的行,交换player1和player2的值 df.loc[swap_mask, ['player1', 'player2']] = df.loc[swap_mask, ['player2', 'player1']].values
- 如果存在多组对应列(如
player1_score、player2_score等):
# 自动匹配所有player1/player2开头的列 player1_cols = [col for col in df.columns if col.startswith('player1')] player2_cols = [col for col in df.columns if col.startswith('player2')] # 批量交换对应列的数据 df.loc[swap_mask, player1_cols + player2_cols] = df.loc[swap_mask, player2_cols + player1_cols].values
4. 添加target字段
# 未交换的行:player1是获胜者,target=1;交换的行:player1是失败者,target=0 df['target'] = np.where(swap_mask, 0, 1)
关键说明
- 调整
np.random.choice的p参数可以灵活控制交换行的比例(比如p=[0.5,0.5]就是50%的行交换) - 掩码是逐行随机生成的,每次运行都会得到不同的交换结果,完全满足“随机部分交换”的需求
内容的提问来源于stack exchange,提问作者Anton G
相关产品推荐
相关产品推荐

