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

如何自动对DataFrame切片的rst列做异或运算并写入dr列?

问题场景

有一个名为solve的DataFrame,步长为4的切片结果如下:

rst  dr
0     1   0
4     3   0
8     7   0
12    5   0
16   14   0
20   12   0
24    4   0
28    4   0
32    4   0
36    3   0
40    3   0
44    5   0
48    5   0
52   13   0
56    3   0
60    1   0

需要将rst列中步长4切片后的相邻元素进行异或运算(如1^3=2、3^7=4),并将结果写入对应位置的dr列。当前手动截取长度的方法无法适配数据长度变化,需自动化方案;同时需要列间异或的实现策略。

自动化解决方案(切片内相邻元素异或)

无需手动处理长度匹配,利用pandas的shift方法自动对齐相邻元素:

# 提取步长为4的子数据集,避免修改原数据时的链式索引警告
slice_subset = solve[::4].copy()

# 计算当前rst与下一个rst的异或,shift(-1)自动获取下一行元素,最后一行无后续元素会生成NaN
slice_subset['dr'] = slice_subset['rst'] ^ slice_subset['rst'].shift(-1)

# 将计算结果写回原DataFrame,NaN位置填充为0(匹配原数据最后一行dr的默认值)
solve.loc[slice_subset.index, 'dr'] = slice_subset['dr'].fillna(0).astype(int)

原理说明

  • shift(-1)会将rst列整体上移一行,自动实现"当前元素与下一个元素"的配对,无需手动截取数组长度
  • 通过原切片的索引(slice_subset.index)直接写回原DataFrame,确保位置完全对应
  • 最后一行因无后续元素,异或结果为NaN,用fillna(0)统一处理为原数据的默认值
列间异或进阶策略

根据不同场景,列间异或可通过以下方式实现:

  1. 同一行内两列异或
    直接对同行列值进行异或运算,生成新列:

    # 生成新列,存储col1和col2的异或结果
    solve['col_xor'] = solve['col1'] ^ solve['col2']
    
  2. 跨列跨行异或
    比如某列当前行与另一列下一行的异或,结合shift方法实现:

    # col1当前行 异或 col2下一行的结果
    solve['cross_xor'] = solve['col1'] ^ solve['col2'].shift(-1)
    
  3. 分组后列间异或
    按指定列分组,组内执行列间异或操作:

    # 按group_col分组,组内col1与col2的下一行异或
    solve['group_xor'] = solve.groupby('group_col').apply(
        lambda x: x['col1'] ^ x['col2'].shift(-1)
    ).reset_index(drop=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:42:45