2016-07-18 40 views
2

2つの列でグループ化して累積カウントを取得したいとします。私はグループ内の関連するコードを探してみましたが、それを見つけることができませんでしたが、コード化されたものに基づいていくつかのヒントが得られましたが、エラーで終了しています。これは解決できますか?パンダのGroupbyと累積数

ID ABC XYZ 
1 A .512 
2 A .123 
3 B .999 
4 B .999 
5 B .999 
6 C .456 
7 C .456 
8 C .888 
9 d .888 
10 d .888 

出力は[ABCまたはXYZのいずれかに新しい値カウンタをインクリメントする必要があります]のようになります。

ID ABC XYZ GID 
1 A .123 1 
2 A .512 2 
3 B .999 3 
4 B .999 3 
5 B .999 3 
6 C .456 4 
7 C .456 4 
8 C .888 5 
9 d .888 6 
10 d .888 6 

コードが

DF=DF.sort(['ABC','XYZ'] ,ascending = [1,0]) 
DF['GID'] = DF.groupby('ABC','XYZ').cumcount() 

以下のようである。しかし、それはエラーで終わるされています

ValueError: No axis named XYZ for object type

+1

あなたの2回目の試行は動作するはずです。 'DF.groupby(['ABC'、 'XYZ'])のリストに列名を渡すだけです。cumcount()' – ayhan

+0

これで問題は解決しました。時間を節約するためにありがとう。 – Surya

答えて

2

私はこのような目的の結果を得ました。

c1 = df.ABC != DF.ABC.shift() 
c2 = df.XYZ != DF.XYZ.shift() 
DF['GID'] = (c1 | c2).cumsum() 
DF 

enter image description here

+0

素晴らしい!このコードは、サンプルデータに期待通りに提供された/提供されています。 ありがとうございましたpiRsquaredも問題解決のためにayhanに感謝します。 もう1つのクエリは、「ABC名」と「XYZ値」として列名があり、単語間にスペースがあるため、無効な構文として表示されています。私は単引用符と二重引用符を入れようとしましたが、まだ助けにはなりません。上記のように列名を渡す方法はありますか(名前は変更しません)。 – Surya