我想将熊猫从0.25.3升级到版本1 给定数据框
import pandas as pd
d = {'group': [1, 2, 2], 'value': [3, 4, 5]}
df = pd.DataFrame(data=d)
我应该如何迁移以下分组依据
aggregation = {
"value": {
"min": lambda x: x.min(skipna=True),
}
}
grouped = (
df[["group", "value"]]
.groupby(["group"], as_index=False)
.agg(aggregation)
)
grouped = (
df[["group", "value"]]
.groupby(["group"], as_index=False)
.agg(min=pd.NamedAgg(column='value', aggfunc='min'))
)
这不符合预期,因为缺少组列。查看grouped.columns
MultiIndex([('group',''), ('value','min')], )
vs
索引(['min'],dtype ='object')
答案 0 :(得分:0)
我发现的唯一解决方案是也包括group
列。 as_index=False
似乎不再起作用
grouped = (
df[["group", "value"]]
.groupby(["group"], as_index=True)
.agg(
group=NamedAgg(column='group', aggfunc=lambda x: x.iloc[0]),
min=pd.NamedAgg(column='value', aggfunc='min')
)
)
答案 1 :(得分:0)
这是熊猫1.0中的错误。我提出了问题here。
升级到pandas 1.1,您的代码将开始工作。
无需升级的最简单解决方法是将聚合和重命名分开。
aggregation = {
"value": lambda x: x.min(skipna=True),
}
grouped = (
df[["group", "value"]]
.groupby(["group"], as_index=False)
.agg(aggregation)
)
grouped.rename(columns={'value':'min'}, inplace=True)