对不同dtypes的多列进行分组并汇总以列出

时间:2020-01-10 20:14:02

标签: python pandas

输入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)))

请让我知道我做的错误以及如何解决该错误

1 个答案:

答案 0 :(得分:0)

希望这会有所帮助。

df3 = df.groupby(['Name','num1','num2'], as_index=False).agg(pd.Series.tolist)