我正在使用包含4000列和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循环?
谢谢
答案 0 :(得分:1)
使用:
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中的值。