python / pandas:随机采样在for循环中不起作用

时间:2019-03-20 04:32:56

标签: python pandas loops

我正在处理熊猫数据框,并且试图对我的数据框进行子集处理,以使列的累加总和不大于18 然后选择的黄色百分比应不少于65%,然后尝试运行相同的多次迭代。但是有时候 循环进入无限循环,有时确实会产生结果,但是在每次迭代中我们都会得到相同的结果。

while循环之后的所有内容均来自以下帖子 Python random sample selection based on multiple conditions

df=pd.DataFrame({'id':['A','B','C','D','E','G','H','I','J','k','l','m','n','o'],'color':['red','red','orange','red','red','red','red','yellow','yellow','yellow','yellow','yellow','yellow','yellow'], 'qty':[5,2, 3, 4, 7, 6, 8, 1, 5,2, 3, 4, 7, 6]})

df_sample = df

for x in range(2):
    sample_s = df.sample(n=df.shape[0])
    sample_s= sample_s[(sample_s.qty.cumsum()<= 30)]
    sample_size=len(sample_s)
    while sum(df['qty']) > 18:
        yellow_size = 0.65
        df_yellow = df[df['color'] == 'yellow'].sample(int(yellow_size*sample_size))
        others_size = 1 - yellow_size
        df_others = df[df['color'] != 'yellow'].sample(int(others_size*sample_size))
        df = pd.concat([df_yellow, df_others]).sample(frac=1)
    print df

这是我在两个结果都相同的情况下得到结果的方式。

   color id  qty
     red  H    2
  yellow  n    3
  yellow  J    5
     red  G    2
  yellow  I    1
     red  D    4

    color id  qty
     red  H    2
  yellow  n    3
  yellow  J    5
     red  G    2
  yellow  I    1
     red  D    4

我真的很希望有人能帮助解决这个问题。

0 个答案:

没有答案