【问题标题】:How do you select random rows from a pandas DataFrame with constraints in Python如何在 Python 中从带有约束的 pandas DataFrame 中选择随机行
【发布时间】:2021-01-04 12:01:32
【问题描述】:

我有一个包含名称和成本 (£) 列的大型 DataFrame。有没有办法从这个 DataFrame 中随机选择 10 行,例如总成本不超过 100 英镑?

【问题讨论】:

  • 你可以参考这个question。它处理类似的问题。
  • 请发布示例数据和所需的输出以及您迄今为止尝试过的内容
  • 这能回答你的问题吗? Random row selection in Pandas dataframe
  • 其实这不是重复的,因为综合成本规定。
  • 我认为应该将标题编辑为" How do you select random rows from a pandas DataFrame with column sum constraints" 以区别于this。我认为这个问题是不同的,但标题使它看起来相同。编辑队列已满,否则我会建议。

标签: python pandas dataframe


【解决方案1】:

可以这样做,尽管您可能希望在 while 循环周围设置一些条件,例如最大迭代次数,因为您很容易遇到这样一种情况,即您的 df 的任何子集的综合成本都不会低于然后100 或其他。

应 OP 请求编辑

import pandas as pd
import numpy as np
df=pd.DataFrame({'cost':np.random.uniform(0,10,100)})

n=12 #number of rows to get (I had to do 12 not get infinite loop with my data)
cost_max=100
cost_min=90
cost=80
max_iterations=1000
i=1

while True:
    
    
    df_random = df.sample(n)
    cost=df_random.cost.sum()
    #print(cost)
    
    if cost_min<cost<cost_max:
        break
    
    i+=1
    if i>max_iterations:
        #print('max iterations ({}) reached'.format(max_iterations))
        break

【讨论】:

  • 非常感谢,它工作得很好。我现在还在 while 循环中加入了一个 if 语句,该语句表示 if cost
  • 我不确定我理解它在做什么?通过更改cost_max 变量来设置最低成本。你是说你也希望成本大于90?如果您愿意,我也可以编辑脚本以允许这样做。另外,如果我回答了这个问题,请考虑投票和检查答案;)
  • 基本上我希望成本在 90 到 100 之间。if 语句的意思是说,如果选择 n 行的成本低于 900,则将成本重置为 cost_max+1,所以此时循环没有损坏 - 我试图投票,但它说因为我是新成员,它不会表示歉意
  • 我想这就是你想要的。我有一些注释掉的打印语句,您可以在那里进行调试。请注意,我还添加了最大迭代次数,因此您不会创建无限循环。
猜你喜欢
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 2018-07-15
相关资源
最近更新 更多