如何用Pandas基于布尔序列标记DataFrame中的行分组
问题:为连续相同布尔值的行添加分组标记
原始DataFrame:
| point | switch_on |
|---|---|
| A | True |
| B | True |
| C | True |
| A | False |
| D | False |
| N | True |
| O | False |
| O | False |
| S | False |
预期结果:为连续相同的switch_on值添加分组标记,每次布尔值切换时分组号递增:
| point | switch_on | group |
|---|---|---|
| A | True | 1 |
| B | True | 1 |
| C | True | 1 |
| A | False | 2 |
| D | False | 2 |
| N | True | 3 |
| O | False | 4 |
| O | False | 4 |
| S | False | 4 |
解决方案
使用Pandas的ne()和cumsum()方法即可实现:
import pandas as pd # 构造原始数据 data = { 'point': ['A', 'B', 'C', 'A', 'D', 'N', 'O', 'O', 'S'], 'switch_on': [True, True, True, False, False, True, False, False, False] } df = pd.DataFrame(data) # 生成分组列 df['group'] = df['switch_on'].ne(df['switch_on'].shift()).cumsum() # 查看结果 print(df)
逻辑说明
df['switch_on'].shift():将switch_on列向下偏移一行,用于和当前行比较ne():判断当前行与上一行的switch_on值是否不相等,值切换时返回Truecumsum():对True(视为1)和False(视为0)进行累加,每次值切换时累加1,最终得到连续相同值的分组编号
内容的提问来源于stack exchange,提问作者Alex DiS
相关产品推荐
相关产品推荐

