Pandas: 如何根据频率分布将遵循幂律的数据帧的一列拆分为两列?

Pandas: How to split a column of a dataframe, which follows powerlaw into two based on frequency distribution?

我有一个包含 5 列的 100 万条记录的数据框。

unique_index,name,company_name,city_id,state_id

company_name 有 10 万条唯一记录。这遵循幂律。前 5000 名 company_names 覆盖了 70% 的记录。

我想从贡献数据前 5000 名的公司和其余的公司中获取相同数量的样本。

我试过了pd.qcut(df['company_name'],[0.25,1]。这给了我以下错误: TypeError: unorderable types: str() <= float()qcut 不能应用于字符串吗?

您可以尝试通过 value_counts() 获取排名靠前的公司,然后如果是 in/out 排名靠前的公司,则使用 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

的组中抽样