我在下面有一条汇总声明:
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函数,但不适用于两个。
最佳答案
您需要在data
中指定要汇总其值的列。
例如,
data = data.groupby(['type', 'status', 'name'])['value'].agg(...)
代替
data = data.groupby(['type', 'status', 'name']).agg(...)
如果您没有提及该列(例如
'value'
),那么传递给agg
的dict中的键将被视为列名。 KeyError
是Pandas告诉您在DataFrame one
中找不到名为two
,test2
或data
的列的方式。注意:不建议将dict传递给
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
# ...
如果这与您的情况不符,请提供可运行的代码。
关于python - 在pandas和numpy中聚合lambda函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30718231/