【问题标题】:Pandas: How to split a column of a dataframe, which follows powerlaw into two based on frequency distribution?Pandas:如何根据频率分布将遵循幂律的数据帧的一列分成两部分?
【发布时间】:2017-07-28 19:26:57
【问题描述】:

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

unique_index,name,company_name,city_id,state_id

company_name 列有 100k 条唯一记录。这遵循幂律。 Top 5000 company_names 覆盖了 70% 的记录。

我想从对前 5000 名数据做出贡献的公司和剩余的集合中抽取相同数量的样本。

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

【问题讨论】:

    标签: python pandas sampling power-law


    【解决方案1】:

    您可以尝试通过value_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 所在的组中进行抽样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 2011-03-16
      • 2021-07-17
      • 2018-02-12
      相关资源
      最近更新 更多