输入df如图所示
Name num1 num2 key filter1 filter2 value
TOM 1.1 2.1 a True False 1.0
TOM 1.1 2.1 b True False 2.0
TOM 1.1 2.1 c True False 3.0
TOM 1.1 2.1 d True False 4.0
SAM 1.2 2.1 a False True 5.0
SAM 1.2 2.1 b False True 6.0
df的对应dtype
Name object
num1 float64
num2 float64
key object
filter1 bool
filter2 bool
value float64
dtype: object
我进行了以下操作并遇到了一个异常,在进行了如下所示的汇总后,我遇到了一个异常。
df2 = df.groupby(['Name','num1','num2'],as_index=False)['key','filter1','filter2','value'].agg(list)
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby.py", line 4036, in aggregate
return super(DataFrameGroupBy, self).aggregate(arg, *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby.py", line 3468, in aggregate
result, how = self._aggregate(arg, _level=_level, *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\base.py", line 634, in _aggregate
_axis=_axis), None
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\base.py", line 691, in _aggregate_multiple_funcs
raise ValueError("no results")
ValueError: no results
所需的输出:
Name num1 num2 key filter1 filter2 value
0 TOM 1.1 2.1 [a, b, c, d] [True, True, True, True] [False, False, False, False] [1.0, 2.0, 3.0, 4.0]
1 SAM 1.2 2.1 [a, b] [False, False] [True, True] [5.0, 6.0]
我也尝试了以下方法,这不会降低功能
df3 = df.groupby(['Name','num1','num2'], as_index=False)['key','filter1','filter2','value'].agg(lambda x: list(x)))
请让我知道我做的错误以及如何解决该错误
答案 0 :(得分:0)
希望这会有所帮助。
df3 = df.groupby(['Name','num1','num2'], as_index=False).agg(pd.Series.tolist)