【问题标题】:Python Pandas Create New Bin/Bucket Variable with pd.qcutPython Pandas 使用 pd.qcut 创建新的 bin/bucket 变量
【发布时间】:2015-04-11 03:41:02
【问题描述】:

如何在 python 中使用 pd.qut 创建一个新的 Bin/Bucket 变量?

这对于有经验的用户来说可能看起来很初级,但我对此并不是很清楚,而且在堆栈溢出/谷歌上搜索令人惊讶地不直观。一些彻底的搜索得到了这个(Assignment of qcut as new column),但它并没有完全回答我的问题,因为它没有采取最后一步并将所有内容放入垃圾箱(即 1,2,...)。

【问题讨论】:

    标签: python pandas bins buckets


    【解决方案1】:

    在 Pandas 0.15.0 或更高版本中,pd.qcut 将返回一个系列,如果输入是系列(在您的情况下是这样)或 labels=False,则不是分类。如果您设置labels=False,那么qcut 将返回一个Series,其中bin 的整数指示符作为值。

    所以为了让你的代码适应未来,你可以使用

    data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False)
    

    或者,将一个 NumPy 数组传递给pd.qcut,这样你就可以得到一个分类作为返回值。 请注意,分类属性 labels is deprecated。请改用codes:

    data3['bins_spd'] = pd.qcut(data3['spd_pct'].values, 5).codes
    

    【讨论】:

    • 太棒了!我没有意识到这一点。感谢您指出这一点。
    【解决方案2】:

    编辑:以下答案仅对小于 0.15.0 的 Pandas 版本有效。如果您运行的是 Pandas 15 或更高版本,请参阅:

    data3['bins_spd'] = pd.qcut(data3['spd_pct'], 5, labels=False)
    

    感谢@unutbu 指出。 :)

    假设您有一些要分箱的数据,在我的情况下,选项是分散的,并且您想使用与每个观察对应的存储桶创建一个新变量。上面提到的链接,您可以通过以下方式执行此操作:

    print pd.qcut(data3['spd_pct'], 40)
    
    (0.087, 0.146]
    (0.0548, 0.087]
    (0.146, 0.5]
    (0.146, 0.5]
    (0.087, 0.146]
    (0.0548, 0.087]
    (0.5, 2]
    

    它为您提供与每个观察对应的 bin 端点。但是,如果您想要每个观察值对应的 bin 编号,则可以这样做:

    print pd.qcut(data3['spd_pct'],5).labels
    
    [2 1 3 ..., 0 1 4] 
    

    如果您想创建一个仅包含 bin 编号的新变量,那么将它们放在一起就足够了:

    data3['bins_spd']=pd.qcut(data3['spd_pct'],5).labels
    
    print data3.head()
    
       secid      date    symbol  symbol_flag     exdate   last_date cp_flag  0   5005  1/2/1997  099F2.37            0  1/18/1997         NaN       P   
    1   5005  1/2/1997  09B0B.1B            0  2/22/1997   12/3/1996       P   
    2   5005  1/2/1997  09B7C.2F            0  2/22/1997  12/11/1996       P   
    3   5005  1/2/1997  09EE6.6E            0  1/18/1997  12/27/1996       C   
    4   5005  1/2/1997  09F2F.CE            0  8/16/1997         NaN       P   
    
       strike_price  best_bid  best_offer     ...      close  volume_y    return  0          7500     2.875      3.2500     ...        4.5     99200  0.074627   
    1         10000     5.375      5.7500     ...        4.5     99200  0.074627   
    2          5000     0.625      0.8750     ...        4.5     99200  0.074627   
    3          5000     0.125      0.1875     ...        4.5     99200  0.074627   
    4          7500     3.000      3.3750     ...        4.5     99200  0.074627   
    
       cfadj_y  open  cfret  shrout      mid   spd_pct  bins_spd  
    0        1   4.5      1   57735  3.06250  0.122449         2  
    1        1   4.5      1   57735  5.56250  0.067416         1  
    2        1   4.5      1   57735  0.75000  0.333333         3  
    3        1   4.5      1   57735  0.15625  0.400000         3  
    4        1   4.5      1   57735  3.18750  0.117647         2  
    
    [5 rows x 35 columns]
    

    希望这对其他人有所帮助。至少现在应该更容易搜索。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 2014-12-07
      • 2019-06-20
      • 1970-01-01
      • 2023-02-26
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多