我在下面有一个汇总声明:
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函数而不是两个。
答案 0 :(得分:14)
您需要在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
# ...
如果这与您的情况不符,请提供可运行的代码。