【问题标题】:create pandas dataframe with random integers and finite sum across columns创建具有随机整数和跨列有限总和的熊猫数据框
【发布时间】:2019-07-03 22:21:33
【问题描述】:
df = pd.DataFrame(np.random.randint(0,6,size=(1200000, 3)), 
columns=list('ABC'))
df['sum'] = df[['A','B','C']].sum(axis=1)
df = df[df['sum']==5]
df = df.sample(n=100000)

我想创建一个数据框,其中包含三个不同的列,其中随机数介于 0 和 5 之间,使得列的总和为 5。

【问题讨论】:

    标签: python-3.x pandas numpy random


    【解决方案1】:

    您可以通过np.random.multinomial查看

    np.random.multinomial(5, [1/3.]*3, size=5) # here when you input size 5 , it only creat 5 lines
    Out[38]: 
    array([[2, 2, 1],
           [1, 2, 2],
           [0, 3, 2],
           [1, 1, 3],
           [3, 1, 1]])
    

    完成数据帧

    ary=np.random.multinomial(5, [1/3.]*3, size=5)
    
    df=pd.DataFrame(ary,columns=['A','B','C'])
    df['SUM']=df.sum(1)
    df
    Out[43]: 
       A  B  C  SUM
    0  1  2  2    5
    1  2  2  1    5
    2  1  3  1    5
    3  1  1  3    5
    4  1  2  2    5
    

    【讨论】:

      【解决方案2】:

      您可以使用 itertools 排列来查找 0 到 5 之间且总和等于 5 的数字并将结果分配给 DataFrame

      import itertools
      df = pd.DataFrame([elem for elem in list(itertools.permutations(range(6), 3)) if sum(elem) == 5], columns = list('ABC'))
      df['sum'] = df.sum(1)
      
          A   B   C   sum
      0   0   1   4   5
      1   0   2   3   5
      2   0   3   2   5
      3   0   4   1   5
      4   1   0   4   5
      5   1   4   0   5
      6   2   0   3   5
      7   2   3   0   5
      8   3   0   2   5
      9   3   2   0   5
      10  4   0   1   5
      11  4   1   0   5
      

      【讨论】:

      • 我只想要 5 行。
      • 你总是可以随机选择5行,df.sample(n = 5)
      • @Vaishali 我认为他想直接创建 5 行,而不是创建,然后选择。
      猜你喜欢
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2016-06-24
      • 1970-01-01
      • 2018-04-25
      相关资源
      最近更新 更多