我正在处理Pandas中的一个数据集,我想根据给定的条件删除一些行。我的数据集中有一列是参与者共病的数量,可能的值是0,1,2,3。该数据集大约有100万行(和30个其他列),其中约500k参与者=0个共病,约300K参与者=1个共病,约130K参与者=2个共病,约75k参与者=3个共病。我想根据他们的共病值随机删除参与者组,例如,0共病删除200k,1共病删除100k。我知道如果要删除所有患有给定数量共病的参与者,例如,所有患有0种共病的参与者,我可以执行以下操作:
dataframe=allpart,列名=CM
allpart.drop(allpart[allpart['CM'] == 0].index, inplace = True)
我如何改变它,使其随机选择30万行w/0共病?我的数据帧不是按该列的升序排列的,因此排除了删除一大块行的可能性。我也不确定这是否足够随机。我还想指出,我不会利用这一点从中得出任何合法的结论,这完全是为了我自己的利益
谢谢大家!
一种解决方案是定义每个共病要保留多少行,然后
groupby
+sample
选择该大小的随机子集我添加了一个小检查,以防指定的行数大于该
'CM'
组的数据帧中存在的唯一行数。在本例中,它只返回所有行另一种类似但不需要重建整个数据帧(可能更快)的替代方法是再次指定要保留的行数的字典
d
,并使用sample(frac=1)
洗牌数据帧,然后groupby
+cumcount
保留随机的行子集相关问题 更多 >
编程相关推荐