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

如何遍历DataFrame列统计相邻列差异次数并更新Aggregate列

问题:统计DataFrame每行相邻列值变化次数

我的DataFrame包含1000列,列值范围为0-4。初始数据如下:

CityQ1Q2Q3Q4Aggregate
Newcastle23300
Liverpool42140
Cardiff22230
Glasgow01310

需求:每当相邻两列值不相等时,给Aggregate列加1,最终效果如下:

CityQ1Q2Q3Q4Aggregate
Newcastle23302
Liverpool42143
Cardiff22231
Glasgow01313

我一开始的思路是逐个判断相邻列:

if df['Q1'] != df['Q2']:
    df['Aggregate'] + 1
else:
     pass

接着再判断Q2和Q3:

if df['Q2'] != df['Q3']:
    df['Aggregate'] + 1
else:
     pass

但这样没法高效遍历1000列,希望找到能统计每行总变化次数的方法。

解决方案

可以利用Pandas的移位和聚合操作实现高效统计,无需手动遍历每一列:

import pandas as pd

# 提取需要对比的数值列(排除City和初始Aggregate列)
value_cols = df.columns.difference(['City', 'Aggregate'])
# 计算每行相邻列的差异次数:右移列后与原列比较,统计不相等的数量
df['Aggregate'] = (df[value_cols] != df[value_cols].shift(axis=1)).sum(axis=1)

代码说明:

  • columns.difference(['City', 'Aggregate']):筛选出所有需要对比的数值列,自动适配1000列的场景
  • shift(axis=1):将每行的列值向右移动一位,使得原列与移位后的列对应位置为相邻的两列
  • !=:逐元素比较原列和移位后的列,得到布尔值DataFrame(不相等为True)
  • sum(axis=1):对每行的布尔值求和,True会被视为1,False视为0,结果就是该行相邻列值变化的总次数,直接赋值给Aggregate列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:27:32