Pandas:如何基于条件添加值反转的行至DataFrame
生成反转对战行并合并至原DataFrame
问题场景
现有如下结构的DataFrame:
match team opponent venue 233 3b0345fb Brazil Argentina Home 234 3b2357fb Argentina Brazil Away 427 3b0947fb England Poland Home ...
需完成两个核心操作:
- 筛选出
team为England的行,得到如下切片:
match team opponent venue 559 4a3eae2f England Poland Home ...
- 为该切片的每一行生成反转行(交换
team与opponent的值,将venue的Home替换为Away),并把这些反转行追加到原DataFrame中。
实现代码
import pandas as pd # 假设原DataFrame为df # 1. 筛选目标行 england_rows = df[df['team'] == 'England'] # 2. 生成反转行 reversed_rows = england_rows.copy() # 复制数据,避免修改原切片 # 交换team和opponent列 reversed_rows[['team', 'opponent']] = reversed_rows[['opponent', 'team']].values # 替换venue值 reversed_rows['venue'] = reversed_rows['venue'].str.replace('Home', 'Away') # 3. 合并原DataFrame与反转行 final_df = pd.concat([df, reversed_rows], ignore_index=True)
关键细节说明
- 使用
.copy()复制筛选行:避免直接修改原切片导致的链式赋值警告,同时保证原数据不受影响 - 交换列值时用
.values:规避pandas因列名重复引发的赋值异常 ignore_index=True:合并后重置索引,避免出现重复的行索引
内容的提问来源于stack exchange,提问作者8-Bit Borges
相关产品推荐
相关产品推荐

