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

如何在Pandas中根据条件交换行内多列对应值

解决方案

可以通过向量化条件判断+列值交换的方式高效处理,避免低效的行遍历操作,具体步骤如下:

1. 定位需要修正的行

先筛选出label_1为Under的行,这些行需要交换对应列的值:

mask = df['label_1'] == 'Under'

2. 交换odds列的值

对筛选出的行,交换odds_1和odds_2的数值(需用临时变量避免值覆盖):

temp_odds = df.loc[mask, 'odds_1'].copy()
df.loc[mask, 'odds_1'] = df.loc[mask, 'odds_2']
df.loc[mask, 'odds_2'] = temp_odds

3. 统一修正label列的值

直接将所有行的label_1设为Over,label_2设为Under,完全匹配需求:

df['label_1'] = 'Over'
df['label_2'] = 'Under'

完整代码示例

import pandas as pd

# 构造原始数据
data = {
    'odds_1': [-165, -137, -104, -117, 100, -117],
    'label_1': ['Under', 'Under', 'Over', 'Over', 'Over', 'Over'],
    'line_1': [3.5, 2.5, 10.5, 26.5, 2.5, 14.5],
    'odds_2': [130, 108, -122, -109, -125, -109],
    'label_2': ['Over', 'Over', 'Under', 'Under', 'Under', 'Under'],
    'line_2': [3.5, 2.5, 10.5, 26.5, 2.5, 14.5]
}
df = pd.DataFrame(data)

# 处理数据
mask = df['label_1'] == 'Under'
temp_odds = df.loc[mask, 'odds_1'].copy()
df.loc[mask, 'odds_1'] = df.loc[mask, 'odds_2']
df.loc[mask, 'odds_2'] = temp_odds
df['label_1'] = 'Over'
df['label_2'] = 'Under'

# 输出结果
print(df.to_string(index=False))

运行结果

odds_1 label_1  line_1  odds_2 label_2  line_2
   130    Over     3.5    -165   Under     3.5
   108    Over     2.5    -137   Under     2.5
  -104    Over    10.5    -122   Under    10.5
  -117    Over    26.5    -109   Under    26.5
   100    Over     2.5    -125   Under     2.5
  -117    Over    14.5    -109   Under    14.5

这种方式全程使用pandas向量化操作,比iterrows效率高数倍,同时完美实现列值交换与标签统一修正的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:39:23