【问题标题】:Aggregating lambda functions in pandas and numpy在 pandas 和 numpy 中聚合 lambda 函数
【发布时间】:2015-08-23 10:56:26
【问题描述】:

我在下面有一个聚合语句:

data = data.groupby(['type', 'status', 'name']).agg({'one' : np.mean, 'two' : lambda value: 100* ((value>32).sum() / reading.mean()), 'test2': lambda value: 100* ((value > 45).sum() / value.mean())})

我继续遇到关键错误。我已经能够使它适用于一个 lambda 函数,但不是两个。

【问题讨论】:

    标签: python numpy pandas lambda


    【解决方案1】:

    您需要在data 中指定要聚合其值的列。 例如,

    data = data.groupby(['type', 'status', 'name'])['value'].agg(...)
    

    而不是

    data = data.groupby(['type', 'status', 'name']).agg(...)
    

    如果您没有提及该列(例如'value'),则传递给agg 的dict 中的键将被视为列名。 KeyErrors 是 Pandas 告诉您在 DataFrame data 中找不到名为 onetwotest2 的列的方式。

    注意:将字典传递给groupby/agg 已被弃用。相反,您应该改为传递一个元组列表。每个元组都应采用('new_column_name', callable) 的形式。


    这是可运行的示例:

    import numpy as np
    import pandas as pd
    
    N = 100
    data = pd.DataFrame({
        'type': np.random.randint(10, size=N),
        'status': np.random.randint(10, size=N),
        'name': np.random.randint(10, size=N),
        'value': np.random.randint(10, size=N),
    })
    
    reading = np.random.random(10,)
    
    data = data.groupby(['type', 'status', 'name'])['value'].agg(
        [('one',  np.mean), 
        ('two', lambda value: 100* ((value>32).sum() / reading.mean())), 
        ('test2', lambda value: 100* ((value > 45).sum() / value.mean()))])
    print(data)
    #                   one  two  test2
    # type status name                 
    # 0    1      3     3.0    0    0.0
    #             7     4.0    0    0.0
    #             9     8.0    0    0.0
    #      3      1     5.0    0    0.0
    #             6     3.0    0    0.0
    # ...
    

    如果这不符合您的情况,那么请提供符合的可运行代码。

    【讨论】:

    • 按照上面的例子,列名被称为。你知道如何添加自定义名称吗?
    • @sometimes24:您是否将函数列表传递给groupby/agg?如果是这样,请改为传递一个元组列表。我已经更新了上面的代码以显示我的意思。如果这不是您的情况,那么请打开一个包含所有详细信息的新问题(具有所需输出的可运行示例很有帮助。)
    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2013-06-03
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多