次のような構造の 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 ...