【问题标题】:Python custom aggregates - need a more efficient solutionPython 自定义聚合 - 需要更高效的解决方案
【发布时间】:2019-03-21 02:08:12
【问题描述】:

我是 Python 的新手,我正在使用一个感兴趣的数据集来帮助我学习,特别是试图更好地理解 pandas 和 numpy。

我的数据框有超过一百万行,我正在尝试创建一个自定义存储桶,以便找到更多有趣的见解。我的数据集如下所示:

我的数据表:

Price    Postal_area    Purchase_Month
123000   SE22           2018_01
240000   GU22           2017_02
.
.
.

我想将数据分组到

我试图做的是创建一个自定义函数:

def price_range(Price):
    if (Price <= 100000):
        return ("Low Value")
    elif (100000 < Price < 200000):
        return ("Medium Value")
    elif (200001 < Price < 500000):
        return ("Medium High")
    elif (Price > 500001):
        return ("High")
    else:
        return ("Undefined")


然后我在我的数据集中创建一个新列,如下所示:

for val in (my_table.Price):
    my_table["price_range"] = (price_range(val))

我应该能够从中创建一个 agg,但它是一个极其缓慢的过程 - 已经在大约 100 万行上运行了 30 多分钟并且仍在运行!

我曾尝试使用 numpy 和 pandas(数据透视表、groupby、lambdas)创建自定义数据存储桶,但无法弄清楚如何合并自定义存储桶逻辑。

我查看了以下几个其他答案,但它没有满足我的特定自定义需求: Efficient way to assign values from another column pandas df

非常感谢任何帮助!

【问题讨论】:

    标签: python pandas dataframe aggregate bins


    【解决方案1】:

    使用apply 函数将您的自定义函数price_range 应用到my_table

    my_table['price_range']=my_table['Price'].apply(price_range)
    

    如果你想要相同范围的垃圾箱:

    my_table['price_range']=pd.cut(my_table['Price'], bins = 4, labels = ['Low Value', 'Medium Value', 'Medium High', 'High'])
    

    【讨论】:

    • 啊太棒了 .apply 立即生效!非常感谢。是的,如果我很乐意将数据分成 4 个偶数组,我会使用这些垃圾箱。
    【解决方案2】:

    您可以尝试使用pd.cut 来削减范围内的值并指定要分配的标签 df

        Price
    0   12300
    1   24000
    2   232455
    3   343434343
    
    
    pd.cut(df.Price,[0,100000,200000,500000,np.inf],labels=['Low_value','Medium Value','High','Undefined'])
    

    输出:

    0    Medium Value
    1            High
    2            High
    3       Undefined
    Name: Price, dtype: category
    Categories (4, object): [Low_value < Medium Value < High < Undefined]
    

    【讨论】:

    • 非常整洁 - 非常感谢您提供的剪裁技巧。在麦金尼的书中不是很明显。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多