2016-06-12 3 views
0

내 데이터는 소매 품목 및 판매 실적이있는 데이터 프레임입니다. 열은 다음과 같습니다 : 2016 단위 판매 2015 단위 판매, 상품 설명 등을 내가 브랜드에 대한 GROUPBY을 할 때 :팬더 : 다중 GroupBy 결과를 사용하여 새 데이터 프레임 만들기

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

내가받을 다음과 같은 오류 : TypeError: unorderable types: int() < str()

나는이 때문이 아니라 가정 DataFrame의 모든 데이터는 숫자이므로 팬더는 '합계'를 모릅니다.

하지만 같은 개인 GROUPBY의 사용 무언가를 얻을 수 있습니다 :

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

은 궁극적으로 그냥 그룹 싶다 "주요 브랜드"에 의해 "2016 개 단위"에서 "2015 단위"를 비교하고로를 세 가지를 모두 넣어 "주요 브랜드"를 색인으로 사용하는 새로운 DataFrame

나는 여러 개의 groupby를 병합하려고 시도했지만 결코 작동하지 않는 것 같습니다.

감사합니다.

답변

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

를 내가 얻을 어떤 이유로 "형식 오류를 : unorderable 유형 : STR()를 Stephen

+0

@Stephen, 질문 할 때 항상 [최소, 완전하며 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 제공하십시오. _pandas_ 질문의 경우 샘플 _input_ 및 _output_ 데이터 세트 (CSV/dict/JSON/Python 코드 형식으로 5-7 행 _as text_를 입력하십시오. 따라서 응답을 코딩 할 때 사용할 수 있습니다). '당신의 코드가 작동하지 않습니다. '또는'데이터와 함께 작동하지 않습니다'등 – MaxU

+0

@Stephen, 다음 명령의 출력을 게시 할 수도 있습니다 :'print (Data.dtypes)' – MaxU

1

I get the following error: TypeError: unorderable types: int() < str()

그것은 당신의 dtypes가 수정되지 않도록 할 수 있을까요? 예 : str. int 대신에? 다음과 같이 뭔가로 dataframe를 만들 시도 할 수 :

In [18]: import numpy as np; import pandas as pd 

In [19]: col1 = ['adidas','nike','yourturn','zara','nike','nike','bla','bla','zalando','amazon'] 

In [20]: data = {'Major Brand':col1, '2016 Units':range(len(col1)), '2015 Units':range(len(col1),len(col1)*2)} 

In [21]: x = pd.DataFrame(data, dtype=np.int64 ) 

In [22]: 

In [22]: x.groupby(by="Major Brand").sum() 
Out[22]: 
      2015 Units 2016 Units 
Major Brand       
adidas    10   0 
amazon    19   9 
bla     33   13 
nike     40   10 
yourturn    12   2 
zalando    18   8 
zara     13   3 

In [23]: x.groupby(by="Major Brand")["2016 Units","2015 Units"].sum() 
Out[23]: 
      2016 Units 2015 Units 
Major Brand       
adidas    0   10 
amazon    9   19 
bla     13   33 
nike     10   40 
yourturn    2   12 
zalando    8   18 
zara     3   13 

In [24]: x.dtypes 
Out[24]: 
2015 Units  int64 
2016 Units  int64 
Major Brand object 
dtype: object 

In [25]: x.groupby(by="Major Brand").agg(['count','sum','mean','median']) 
Out[25]: 
      2015 Units      2016 Units      
       count sum  mean median  count sum  mean median 
Major Brand                 
adidas    1 10 10.000000 10.0   1 0 0.000000 0.0 
amazon    1 19 19.000000 19.0   1 9 9.000000 9.0 
bla     2 33 16.500000 16.5   2 13 6.500000 6.5 
nike     3 40 13.333333 14.0   3 10 3.333333 4.0 
yourturn    1 12 12.000000 12.0   1 2 2.000000 2.0 
zalando    1 18 18.000000 18.0   1 8 8.000000 8.0 
zara     1 13 13.000000 13.0   1 3 3.000000 3.0 
+0

죄송합니다. "ValueError : 기본 10의 int()에 대한 리터럴이 잘못되었습니다. '데이터'" – Stephen

+0

@stephen, 내가 만든 예제 데이터도 사용해 보셨습니까? – PlagTag

+0

@Stephen, 나를 위해 강력하게 유형 변환 오류가있는 것 같습니다. 예 : 원시 데이터의 일부 필드는 int로 변환 할 수 없습니다. – PlagTag