0

次のような構造の pandas DataFrame があります。

data = DataFrame({'Cat1':['A', 'B', 'B', 'C'], 'Cat2': ['X', 'Y', 'Z', 'X'], 'Counter': [0, 4, 1, 5]})

ここで、Cat1 によるランキングで別の列を追加したいと思います (この場合、新しい列として 1,3,2,4)。私の最初の試みは:

data['ranking'] = data['ranking'] + data[data['Cat1'] == 'A']['Counter'].rank(ascending=0).fillna(0)

ただし、2 番目のカテゴリ (条件として data['Cat1']=='B') を追加すると、既存の値が上書きされます。私が理解している限り、.add() を使用する必要があるため、これは私が期待したことです。ただし、次のスクリプトでも同じことが起こります。

data['ranking'].add(data[data['Cat1']=='A']['Counter'].rank(ascending=0))

また、Cat1==B のすべての値を NA でオーバーライドします。どうすればこれを回避できますか?

前もって感謝します!

-----------------------編集!! ------------------

これが私のテーブルだとしましょう:

ここに画像の説明を入力

通常のランクでは、1 から 12 までのすべての数字のランキングが得られます。ここで必要なのは、カテゴリに基づいたランキングであり、元の python DataFrame の追加の列です。

したがって、最後の列は次のようになります。 2 (a の 2 位の値) 3 (a の 3 位の値) 1 (a の 1 位の値) 1 (b の 1 位の値) 1 (1 位の値) cの値) 5 2 ...

4

1 に答える 1

2

あなたの質問を正しく理解しているかどうかわかりません。たぶん、これは以下の作品ですか?

data['Cat1'][data['Counter'].rank(ascending=0) - 1]

--編集--

コメントのように、私の解決策は

data['ranking'] = data.groupby('Cat1')['Counter'].rank(ascending=0)

他に思いつきません、すみません。たぶん、他の人は別の視点を持っているでしょう..

于 2013-01-29T15:19:02.260 に答える