Pandas按人员分组比较某列值与另一列前序值的最简方法
分组列相等判断最简实现方案
核心需求
- 按
person字段对DataFrame分组 - 逐行判断同组内当前行A列值与前一行B列值是否相等
- 优先不使用
apply/lambda写法 - 本次示例中待对比的两个值为
applez与applet
示例输入DataFrame结构
df A B person 0 fruit applet abby 1 applez cherry abby ...
实现代码
直接使用pandas原生分组向量化操作即可,无自定义循环、无apply/lambda调用,代码最简洁且性能最优:
df.groupby("person").A.eq(df.groupby("person").B.shift())
逻辑说明
df.groupby("person").B.shift():按person分组后将B列值向下错位1行,得到每行对应的同组前一行B列值;每组第一行无前序数据,错位后返回NaN- 分组后的A列调用
.eq()方法,和错位后的B列序列做逐行相等判断,索引自动对齐 - 该写法所有运算走pandas底层C实现的向量化逻辑,运行效率远高于apply、lambda或手写循环的写法
预期输出
0 NaN 1 False
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

