Python 熊猫:如何根据频率分布将一列遵循幂律的数据帧一分为二?

Python 熊猫:如何根据频率分布将一列遵循幂律的数据帧一分为二?,python,pandas,sampling,power-law,Python,Pandas,Sampling,Power Law,我有一个100万条记录的数据框,有5列 unique_index,name,company_name,city_id,state_id 列,company\u name,具有10万条唯一记录。这遵循幂律。前5000名公司名称覆盖了70%的记录 我想从数据排名前5000位的公司和剩余的公司中抽取相同数量的样本 我尝试了pd.qcut(df['company\u name',[0.25,1]。这给了我以下错误: TypeError:unorderable types:str()你可以尝试通过va

我有一个100万条记录的数据框,有5列

unique_index,name,company_name,city_id,state_id
列,
company\u name
,具有10万条唯一记录。这遵循幂律。前5000名
公司名称
覆盖了70%的记录

我想从数据排名前5000位的公司和剩余的公司中抽取相同数量的样本

我尝试了
pd.qcut(df['company\u name',[0.25,1]
。这给了我以下错误:
TypeError:unorderable types:str()你可以尝试通过
value\u counts()
来抓取排名靠前的公司,然后用
True/False
创建一个新的列,如果它在排名靠前的公司之内/之外。我想它看起来会像这样:

top5000 = df['company_name'].value_counts().index[0:5000].tolist()
df['InTop'] = df['company_name'].isin(top5000)
这将允许您从
df['InTop']==True
组和
df['InTop']==False