您需要指定列data
其值要被聚合。
例如,
data = data.groupby(['type', 'status', 'name'])['value'].agg(...)
代替
data = data.groupby(['type', 'status', 'name']).agg(...)
如果您不提及该列(例如'value'
),然后 dict 中的键传递给agg
被视为列名称。这KeyError
s 是 Pandas 告诉你它找不到名为的列的方式one
, two
or test2
在数据框中data
.
注意:将字典传递给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
# ...
如果这与您的情况不符,请提供符合您情况的可运行代码。