Aggregate function that retuns a list in Pandas results in ValueError: Must produce aggregated value
Aggregate function that retuns a list in Pandas results in ValueError: Must produce aggregated value
我有这个pd.DataFrame
:
import pandas as pd
df = pd.DataFrame({
'A': [2400, 2400, 2400, 2401, 2401],
'B': [0,1,2,0,1],
'val': [[], [], [], ['val1', 'val2'], ['val1']],
}).set_index(['A', 'B'])
我想按 A
分组,然后使用此函数链接列表中的所有 val
值:
from itertools import chain
def _flattened_set(list_list_elements):
return list(set(chain.from_iterable(list_list_elements)))
print(_flattened_set([[], [], []]))
>>> []
print(_flattened_set([['val1', 'val2'], ['val1']]))
>>> ['val2', 'val1']
所以,在 groupby
之后,我预计会出现这样的结果 pd.DataFrame
:
然而,当我这样做时:
df.groupby(level=0).aggregate({'val': _flattened_set})
显示此错误:
ValueError: Must produce aggregated value
我错过了什么吗?为什么它不起作用?我以前使用过返回列表而不是聚合唯一值本身的聚合函数,但由于某种原因,这个函数失败了。
注意:我知道如何用更多代码行来规避这个问题,但我想知道为什么这个聚合会因为这个原因而失败
通过将 pandas 升级到版本 1.3.1
解决,如 @Andrej Kesely
所指出
我有这个pd.DataFrame
:
import pandas as pd
df = pd.DataFrame({
'A': [2400, 2400, 2400, 2401, 2401],
'B': [0,1,2,0,1],
'val': [[], [], [], ['val1', 'val2'], ['val1']],
}).set_index(['A', 'B'])
我想按 A
分组,然后使用此函数链接列表中的所有 val
值:
from itertools import chain
def _flattened_set(list_list_elements):
return list(set(chain.from_iterable(list_list_elements)))
print(_flattened_set([[], [], []]))
>>> []
print(_flattened_set([['val1', 'val2'], ['val1']]))
>>> ['val2', 'val1']
所以,在 groupby
之后,我预计会出现这样的结果 pd.DataFrame
:
然而,当我这样做时:
df.groupby(level=0).aggregate({'val': _flattened_set})
显示此错误:
ValueError: Must produce aggregated value
我错过了什么吗?为什么它不起作用?我以前使用过返回列表而不是聚合唯一值本身的聚合函数,但由于某种原因,这个函数失败了。
注意:我知道如何用更多代码行来规避这个问题,但我想知道为什么这个聚合会因为这个原因而失败
通过将 pandas 升级到版本 1.3.1
解决,如 @Andrej Kesely