2016-06-12 9 views
0

私のデータは小売アイテムとその販売実績を持つデータフレームです。列が含まれます:2016年の販売台数、2015年販売台数、商品説明などを私はブランドのためのGROUPBYをしようとすると:パンダ:複数のGroupBy結果を使用して新しいデータフレームを作成

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

私は次のエラーを取得する:TypeError: unorderable types: int() < str()

私はこれが原因ではないと仮定しますDataFrame内のすべてのデータは数字なので、パンダは「合計」を知ることができません。

しかし、私のような個々のGROUPBYの使用して何かを得ることができます:「2015台」に最終的に私はちょうど「メジャーブランド」でグループ化すると、「2016の単位を」比較

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

をとに3つのすべてのそれらを置きます「主要ブランド」を指標とする新しい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

を私が手にいくつかの理由について "例外TypeError:unorderableタイプ:STR() Stephen

+0

@Stephen、質問をするときは、常に[最小限の、完全で検証可能な例(http://stackoverflow.com/help/mcve)]を提供してください。 _pandas_の質問の場合は、サンプルの_input_と_output_データセット(CSV/dict/JSON/Pythonコードの形式で_7行〜_ text_です)を入力してください。 'あなたのコードは私のために働いていません '、'自分のデータでは動かない 'など – MaxU

+0

@Stephen、次のコマンドの出力を投稿することもできます:' print( Data.dtypes) ' – MaxU

1

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

それはあなたのdtypesが修正されていないということだろうか?例えばstr。 intの代わりに?

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()のリテラルが無効です:" Data "" – Stephen

+0

@stephen、作成したサンプルデータでも試しましたか? – PlagTag

+0

@Stephen、あなたには型変換エラーがあるように強く感じます。例えば。生データの一部のフィールドはintに変換できません。 – PlagTag

関連する問題