我的groupby()在熊猫数据框中不起作用

时间:2019-02-21 14:18:54

标签: python pandas group-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    

我必须对Cod,Cost和Date进行分组,并使用reset_index()获得相应的VAL最小值。我的代码是:

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 

2 个答案:

答案 0 :(得分:0)

我刚刚为您模拟了您的样本及其作品:

示例:

>>> 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

OR

>>> 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

答案 1 :(得分:0)

就像这里的其他贡献者一样,您的代码可以为我带来预期的结果,但是由于情况并非如此,因此您可以让我提出另一个解决方案,尽管效率要低得多。

从复制数据框开始

$ProcessData = (Get-Counter '\Process(svchost*)\% Processor Time').Countersamples | Sort cookedvalue -Desc | Select-Object -First 1
$ProcessData.InstanceName

然后我们可以按照Cod,Cost,Date和VAL对值进行排序

const path = require("path");

module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        loaders: ["style-loader", "css-loader", "sass-loader"],
        include: path.resolve(__dirname, "../")
      }
    ]
  }
};

输出:

df = pd.DataFrame([['A123', 123, '2017-12-21', 0], ['A123', 123, '2017-12-21', -2], ['A123', 123, '2017-12-21', -10], ['FB00', 180, '2016-12-11', 80], ['FB00', 180, '2016-12-11', 80]], columns=['Cod', 'Cost', 'Date', 'VAL'])

然后我们可以删除重复的Cod,Cost和Dates,保留第一条记录(最低值),让我们获得您的预期输出。

df.sort_values(['Cod', 'Cost', 'Date', 'VAL'], ascending=True, inplace=True)

输出为:

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

非常hacky,不建议这样做,但是应该可以为您带来预期的结果。

相关问题