通过Python在CSV中分散随机抽样

通过Python在CSV中分散随机抽样,python,python-2.7,csv,random,pandas,Python,Python 2.7,Csv,Random,Pandas,我有一个(大)CSV目录,其中列[0:3]=电话号码、姓名、城市、州 我创建了一个20000个条目的随机样本,但是,当然,它是根据人口更多的州和城市进行大幅加权的 我如何编写一个python代码(使用CSV或Pandas-我没有可用的linecache),该代码将对每个唯一的城市和每个州(单独,而不是成对)进行同等优先级/权重排序,并将每个唯一的城市限制为3个选择 更棘手的想法是:我如何编写python代码,以便为每一条随机选取的线检查该城市以前是否被选取过。如果之前已拾取该城市,它将忽略该城

我有一个(大)CSV目录,其中列[0:3]=电话号码、姓名、城市、州

我创建了一个20000个条目的随机样本,但是,当然,它是根据人口更多的州和城市进行大幅加权的

我如何编写一个python代码(使用CSV或Pandas-我没有可用的linecache),该代码将对每个唯一的城市和每个州(单独,而不是成对)进行同等优先级/权重排序,并将每个唯一的城市限制为3个选择


更棘手的想法是:我如何编写python代码,以便为每一条随机选取的线检查该城市以前是否被选取过。如果之前已拾取该城市,它将忽略该城市,并再次拾取一条随机线,从而将该城市先前考虑的拾取次数减少一次。所以,假设它随机选择了圣安东尼奥,之前已经选择了两次。该脚本忽略此拾取,将其放回列表中,减少当前考虑的先前圣安东尼奥拾取的数量,然后再次随机选择一行。如果它再次从圣安东尼奥挑选一条线,那么它将重复上一个过程,现在将考虑的圣安东尼奥挑选减少到0。因此,它必须连续三次选择圣安东尼奥,以增加来自圣安东尼奥的另一条线。对于未来的选秀,它必须连续四次选秀圣安东尼奥,再加上一次选秀


我不知道第二个选项对“分散”我的随机选择有多有效——这只是一个想法,而且它看起来是学习更多蟒蛇的有趣方式。如果您有任何与此想法相同的想法,我们将不胜感激。对统计抽样和样本散射的深入了解也将受到欢迎。

实现这一点的方法有很多,但抽象算法应该是这样的

首先,要创建一个新的CSV,以满足关于以相同概率绘制每个状态的第二个标准,请按如下所示绘制每一行

1) 从状态集合中,绘制一个状态(每个状态的绘制概率为1/#个状态)。让那个状态成为s

2) 从大型CSV中,从STATE=s的行集中绘制一行

绘制行时,请记录从给定州/市对中绘制的行数。你可以用字典来做这件事。然后,每次绘制连续行时,如果有任何州/市对等于用户设置的上限,则在上面的步骤2中从条件绘制中排除这些州/市对。这将满足您的第一个要求

这有意义吗?如果您开始使用一些代码来尝试实现它,如果它有任何问题,我会很乐意为您整理它

如果您想使用“稍微复杂一些”的算法,在该算法中,选择城市的概率随着每次选择而降低,那么您可以不费吹灰之力地做到这一点。基本上,在绘制s后,对s州内的城市进行条件设置,然后根据该州内每个城市的绘制次数进行加权(您拥有此信息,因为您一直在存储它以实现第一个要求)。你必须想出加权函数的形式,因为你的描述并没有暗示它


同样,如果您尝试编写此代码,我很乐意查看您发布的任何代码并提出建议

如果一个州有如此多的城市拥有最大数量的线路,以至于超过了该州的限制,那么应该删除哪些线路?