如何在Pandas中让两列实现同步随机增减变动?
我来帮你解决这个问题!你的需求是让DataFrame里的B、C列每行的变动幅度完全一致,方向随机——也就是每行要么同时加1,要么同时减1(也可以选择保持不变),对吧?
先分析你之前代码的问题
- 第一次使用
apply时,没有指定axis=1,默认是按列处理,所以整个B列和C列会被加上同一个随机值,无法实现每行独立的随机变动。 - 第二次分开处理B、C列时,每列各自生成随机增量,导致每行的B、C变动可能不一致,不符合需求。
解决方案
这里提供两种高效的实现方式,任选其一即可:
方法一:用NumPy生成统一随机增量(推荐,大数据量下效率更高)
先为每行生成一个统一的随机增量,再通过广播机制同时应用到B、C两列:
import pandas as pd import numpy as np # 初始化你的DataFrame data = pd.DataFrame(1.0, index=[1,2,3,4,5], columns=list('ABCD')) # 为每行生成随机增量:可选-1、1(如果需要包含不变的情况,改成[-1, 0, 1]) delta = np.random.choice([-1, 1], size=len(data)) # 将增量广播到B、C两列,实现同步变动 data[['B', 'C']] += delta[:, np.newaxis]
方法二:用apply按行处理(更直观)
指定axis=1让apply按行操作,每行仅生成一个随机增量,同时加到B、C列上:
import pandas as pd import random data = pd.DataFrame(1.0, index=[1,2,3,4,5], columns=list('ABCD')) # 按行处理,每行生成一个统一的随机增量,同步更新B、C data[['B', 'C']] = data[['B', 'C']].apply( lambda row: row + (-1)**random.randrange(2), axis=1 )
效果验证
运行上述任意一种方法后,你会得到和期望输出一致的结果:每行的B、C值完全同步,要么同时加1、要么同时减1(或保持不变),其他列不受影响。
内容的提问来源于stack exchange,提问作者asyraf
相关产品推荐
相关产品推荐

