【问题标题】:Pandas bins with additional bin of ==0带有 ==0 附加箱的熊猫箱
【发布时间】:2017-04-21 10:52:56
【问题描述】:

我正在尝试使用具有如下范围的熊猫箱

tipBins = [1,5,10,15,20,25,30].

此外,对于某些游乐设施,小费为零,不属于任何范围。 如何在熊猫箱中提供零值。我需要如下所示的箱分区

==0
1-5
5-10
10-15
15-20
20-25
25-30

import numpy as np
tipBins = [1,5,10,15,20,25,30]
tipData=DataFrame(tipPercentage)
tip_data_names = ["No Tip", '1-5','5-10','10-15','15-20','20-25','25-30']
tipData['ranges'] = pd.cut(tipData['tipPercent'], tipBins, labels=tip_data_names)
td=tipData[['count','ranges']].groupby(['ranges']).sum().fillna(0)
sd.reset_index()

我应该有这样的垃圾箱吗tipBins = [0,0,1,5,10,15,20,25,30].

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    如果您确定 tipPercentage 不会包含任何负数,您可以在 tipBins 中添加一个负数,例如:

    tipBins = [-1,1,5,10,15,20,25,30]
    

    示例

    v = [0, 4, 7, 20, 26]    
    tip_data_names = ["No Tip", '1-5','5-10','10-15','15-20','20-25','25-30']
    
    import pandas as pd
    pd.cut(v, tipBins, labels=tip_data_names)
    
    # [No Tip, 1-5, 5-10, 15-20, 25-30]
    # Categories (7, object): [No Tip < 1-5 < 5-10 < 10-15 < 15-20 < 20-25 < 25-30]
    

    如果您有超出所需范围的数据,例如,您不想包含介于 0 和 1 之间的某些值,那么您可能需要在 cut 之前过滤您的数据:

    tipData = tipData[(tipData['tipPercent'] == 0) | ((tipData['tipPercent'] >= 1) & (tipData['tipPercent'] <= 30)]
    

    这样,你的数据就会完全落在你关心的范围内,那么你就可以使用上面的方法进行切割了。

    【讨论】:

    • 此解决方案不正确,因为您的第一个 bin 为 (-1, 1]。对于 v = 1,输出为 'No Tip'。您需要添加 0,即 tipBins = [-1, 0, 1, 5, 10, 15, 20, 25, 30]
    猜你喜欢
    • 2013-05-10
    • 2014-11-05
    • 2017-09-09
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多