Pandas:使用多个GroupBy结果创建新数据框

时间:2016-06-12 21:33:34

标签: python pandas dataframe

我的数据是包含零售商品及其销售业绩的数据框架。栏目包括:2016年单位销售额,2015年单位销售额,项目描述等。当我尝试为品牌进行分组时:

Data.groupby(by="Major Brand").sum()

我收到以下错误:TypeError: unorderable types: int() < str()

我认为这是因为并非DataFrame中的所有数据都是数字,因此pandas不知道如何总结#39;

但我可以使用以下内容获得个人群组:

Data.groupby(by="Major Brand")["2016 Units"].sum()

最终,我只想按照#34; Major Brand&#34;并比较&#34; 2016年单位&#34;到&#34; 2015年单位&#34;并将所有这三个放入一个新的DataFrame中,使用&#34; Major Brand&#34;作为索引。

我曾尝试将我的多个群组合并在一起,但这似乎永远不会奏效。

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以这样做:

Data.groupby(by="Major Brand")["2016 Units","2015 Units"].sum()

演示:

In [29]: Data.groupby(by="Major Brand")["2016 Units","2015 Units"].sum()
Out[29]:
             2016 Units  2015 Units
Major Brand
1                   218         238
2                   172         122
3                   192         273
4                   176         172

数据:

In [30]: Data
Out[30]:
    Major Brand  2016 Units  2015 Units    X
0             1          75          83  xxx
1             1          82          95  xxx
2             3          85          47  xxx
3             3           1          40  xxx
4             1          43          43  xxx
5             4          35          65  xxx
6             3          38          71  xxx
7             4          56          90  xxx
8             3           9          77  xxx
9             1          18          17  xxx
10            3          59          38  xxx
11            4          85          17  xxx
12            2          64          13  xxx
13            2          32          33  xxx
14            2          76          76  xxx

答案 1 :(得分:1)

  

我收到以下错误:TypeError:unorderable types:int()&lt; STR()

难道你的dtypes不正确吗?例如str。而不是int? 您可以尝试使用以下内容创建数据框:

using namespace testing;

TEST(Fundus_Mask_Creation, FAILS_FOR_TWO_CHANNEL_IMAGES) {

    // create image with two channels
    cv::Mat img( ... );

    GlogWrapperMock glogMock;
    Retina::Preprocessing::setLogger(&glogMock);

    std::string expectedMessage = "Number of image channels found = 2. Terminating Now!!";
    EXPECT_CALL(glogMock, LogIf(ERROR, _, expectedMessage).WillOnce(Return());

    cv::Mat* mask = Retina::Preprocessing::create_mask(&img);

    // Make additional assertions if necessary
    ...
}