如何在Pandas中生成新列,计算每行两列值间的随机整数
嘿,我来帮你搞定这个生成行内随机整数的问题!
首先得说清楚你之前的代码为啥不行:
- 第一个
apply写法里,你用了data.start和data.end,这是整个列的数据,不是当前行的单个值,而且还没加axis=1参数(默认是按列处理,咱们需要按行来),所以肯定出问题。 - 第二个直接用
np.random.randint传整列的话,旧版本的NumPy不支持这种数组式的参数,而且你还没考虑randint是左闭右开的特性——它不会包含你传入的end值哦。
接下来给你两种可行的解法,按需选就行:
方法1:用apply逐行处理(适合小数据集)
这种写法直观,每行单独取start和end的值来生成随机数,记得加上axis=1指定按行处理,还要给end加1来包含它本身:
import pandas as pd import numpy as np data = pd.DataFrame({'start': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'end': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}) data = data.iloc[:, [1, 0]] # 交换列顺序 # 新增随机数列 data['rand_between'] = data.apply(lambda x: np.random.randint(x['start'], x['end'] + 1), axis=1)
方法2:向量化生成(高效,适合大数据集)
如果你处理的是大数据,apply效率会偏低,直接用NumPy的向量化操作更快。现在新版本的NumPy(1.17+)支持给randint传入数组作为low和high参数,一行就能搞定:
data['rand_between'] = np.random.randint(data['start'], data['end'] + 1)
测试一下,你会看到新列里的每个值都在对应行的start和end之间(包含两端)。
内容的提问来源于stack exchange,提问作者Mateusz Konopelski
相关产品推荐
相关产品推荐

