从DF中选择随机列并执行操作

时间:2019-03-22 12:38:37

标签: python numpy dataframe

我正在使用包含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循环?

谢谢

1 个答案:

答案 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中的值。