基于滞后列值填充列 - Python实现方案咨询
实现方案(基于Python Pandas)
核心思路
用shift()方法获取上一行的Team值,对比当前行的Team判断是否发生切换,再给对应列标记1:
- 当从
away切换到home,或是第一行的home时,hpos标1 - 当从
home切换到away时,vpos标1
代码实现
import pandas as pd # 构造初始数据表 data = { 'Team': ['home', 'away', 'away', 'away', 'home', 'home', 'away'] } df = pd.DataFrame(data) # 生成滞后一行的Team列,用于前后状态对比 df['prev_team'] = df['Team'].shift(1) # 初始化vpos和hpos列 df['vpos'] = None df['hpos'] = None # 标记hpos:当前是home,且要么是第一行,要么前一行是away df.loc[(df['Team'] == 'home') & (df['prev_team'].isna() | (df['prev_team'] == 'away')), 'hpos'] = 1 # 标记vpos:当前是away,且前一行是home df.loc[(df['Team'] == 'away') & (df['prev_team'] == 'home'), 'vpos'] = 1 # 移除辅助列prev_team,得到最终结果 df = df.drop('prev_team', axis=1) print(df)
输出结果
| Team | vpos | hpos |
|---|---|---|
| home | None | 1 |
| away | 1 | None |
| away | None | None |
| away | None | None |
| home | None | 1 |
| home | None | None |
| away | 1 | None |
如果需要把None替换成空字符串,只需将代码里初始化和赋值的None改为''即可。
内容的提问来源于stack exchange,提问作者bblackburn
相关产品推荐
相关产品推荐

