コールバックを使用せずにグループ化された DataFrame にシーケンシャル カウンター列を追加する
DataFrame 内のグループにシーケンシャル カウンター列を追加しようとすると、コールバック関数は最も効率的なアプローチではない可能性があります。次の DataFrame について考えてみましょう:
df = pd.DataFrame( columns="index c1 c2 v1".split(), data=[ [0, "A", "X", 3, ], [1, "A", "X", 5, ], [2, "A", "Y", 7, ], [3, "A", "Y", 1, ], [4, "B", "X", 3, ], [5, "B", "X", 1, ], [6, "B", "X", 3, ], [7, "B", "Y", 1, ], [8, "C", "X", 7, ], [9, "C", "Y", 4, ], [10, "C", "Y", 1, ], [11, "C", "Y", 6, ],]).set_index("index", drop=True)
目的は、各グループの連続番号を含む新しい列「seq」を作成することです。その結果、次の出力が得られます:
c1 c2 v1 seq 0 A X 3 1 1 A X 5 2 2 A Y 7 1 3 A Y 1 2 4 B X 3 1 5 B X 1 2 6 B X 3 3 7 B Y 1 1 8 C X 7 1 9 C Y 4 1 10 C Y 1 2 11 C Y 6 3
コールバック関数の回避:
コールバック関数を使用する代わりに、同じ結果をより効率的に達成するには、cumcount() メソッドを使用します。 Cumcount() は、グループ内の各一意の値の出現数をカウントし、累積カウントを含む pandas シリーズを返します。
df["seq"] = df.groupby(['c1', 'c2']).cumcount() + 1
このアプローチでは、DataFrame を直接変更し、コールバック関数のオーバーヘッドを回避します。
開始番号のカスタマイズ:
シーケンスが必要な場合0 ではなく 1 から開始するには、結果に 1 を追加します。
df["seq"] = df.groupby(['c1', 'c2']).cumcount() + 1
cumcount() メソッドを利用することで、グループ化されたデータフレームに順次カウンター列を追加するプロセスが簡素化され、両方の可読性が向上します。そしてパフォーマンス。
以上がコールバック関数を使用せずにグループ化された Pandas データフレームにシーケンシャル カウンター列を効率的に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。