首页 > 解决方案 > 我的 groupby() 在 pandas 数据框中不起作用

问题描述

我必须非常简单地创建一个组,但在我的情况下它不起作用。我无法重现实际数据,但假设我的 DF 是:

              Cod          Cost        Date                 VAL
0            A123          123         2017-12-21           0.0
1            A123          123         2017-12-21          -2.0
2            A123          123         2017-12-21         -10.0
3            FB00          180         2016-12-11          80.0
4            FB00          180         2016-12-11          80.0    

我必须为 Cod、Cost 和 Date 创建一个 groupby,并使用 reset_index() 获得相应的最小值。我的代码是:

DF = DF.groupby(['Cod', 'Cost','Date'])['VAL'].min().reset_index()

预期是:

              Cod          Cost        Date                 VAL
0            A123          123         2017-12-21         -10.0
1            FB00          180         2016-12-11          80.0

但它返回:

              Cod          Cost        Date                 VAL
0            A123          123         2017-12-21           0.0
1            A123          123         2017-12-21           0.0
2            A123          123         2017-12-21          80.0
3            FB00          180         2016-12-11          80.0
4            FB00          180         2016-12-11          80.0 

标签: pythonpandasgroup-by

解决方案


我刚刚模拟了您的样本及其对我的工作:

示例:

>>> df
    Cod  Cost        Date   VAL
0  A123   123  2017-12-21   0.0
1  A123   123  2017-12-21  -2.0
2  A123   123  2017-12-21 -10.0
3  FB00   180  2016-12-11  80.0
4  FB00   180  2016-12-11  80.0

结果:

>>> df.groupby(['Cod', 'Cost','Date'])['VAL'].min().reset_index()                                                                                                            Cod  Cost        Date   VAL
0  A123   123  2017-12-21 -10.0
1  FB00   180  2016-12-11  80.0

应用于熊猫:0.23.3

备用:

您也可以像下面这样申请:

>>> df.groupby(['Cod', 'Cost','Date']).min().reset_index()
    Cod  Cost        Date   VAL
0  A123   123  2017-12-21 -10.0
1  FB00   180  2016-12-11  80.0

它还应该与0.18.1

Python 3.5.1 (default, May 25 2016, 07:19:16)
[GCC 4.8.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> pd.__version__
'0.18.1'

样本

>>> df
    Cod  Cost        Date   VAL
0  A123   123  2017-12-21   0.0
1  A123   123  2017-12-21  -2.0
2  A123   123  2017-12-21 -10.0
3  FB00   180  2016-12-11  80.0
4  FB00   180  2016-12-11  80.0
>>> df.groupby(['Cod', 'Cost','Date']).min().reset_index()
    Cod  Cost        Date   VAL
0  A123   123  2017-12-21 -10.0
1  FB00   180  2016-12-11  80.0

或者

>>> df.groupby(['Cod', 'Cost','Date'])['VAL'].min().reset_index()
    Cod  Cost        Date   VAL
0  A123   123  2017-12-21 -10.0
1  FB00   180  2016-12-11  80.0

推荐阅读