我正在使用一个包含4,000列和17560行的df。我正在执行一个实验,我需要从数据中挑选5个随机列,并将其单元格的值乘以一个介于0.08到0.12之间的随机数。相乘只能在特定的时间间隔内完成。此外,该操作重复100次,每次重复都必须使用5个不同的列,这就是为什么需要随机挑选列的原因。目前,我正在使用以下代码:
interval = int(17560/365)
for k in range(1,100):
rand_nums= np.random.uniform(0.08,0.12)
df[34:45,:] *= (1-rand_nums)
for i in range(1,interval):
rand_nums = np.random.uniform(0.08,0.12,5)
df[i*48+34:i*48+45,:] *= (1-rand_nums)代码可以工作,因为在第二个for循环中,我指定了列数,但是,每次执行此操作时,它都会选取前5列。我的问题是:
有没有办法在每次执行此操作时都选择随机列,而不包括另一个for循环?
谢谢
发布于 2019-03-22 20:43:03
使用:
import pandas as pd
import numpy as np
df = pd.DataFrame(columns= list(range(100)))
# Put these inside your loop
rand_cols = np.random.permutation(df.columns)[0:5]
df[rand_cols]代码np.random.permutation混洗了所有的列名,现在这个列表的任何部分都将是列名的随机选择。
代码df[rand_cols]会选择df的一个子集,因此如果您将其乘以某个数字,例如df[rand_cols] = df[rand_cols] * 2,则只会修改rand_cols中的值。
https://stackoverflow.com/questions/55299785
复制相似问题