您需要在data 中指定要聚合其值的列。
例如,
data = data.groupby(['type', 'status', 'name'])['value'].agg(...)
而不是
data = data.groupby(['type', 'status', 'name']).agg(...)
如果您没有提及该列(例如'value'),则传递给agg 的dict 中的键将被视为列名。 KeyErrors 是 Pandas 告诉您在 DataFrame data 中找不到名为 one、two 或 test2 的列的方式。
注意:将字典传递给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
# ...
如果这不符合您的情况,那么请提供符合的可运行代码。