ホームページ > バックエンド開発 > Python チュートリアル > コールバック関数を使用せずにグループ化された Pandas データフレームにシーケンシャル カウンター列を効率的に追加する方法

コールバック関数を使用せずにグループ化された Pandas データフレームにシーケンシャル カウンター列を効率的に追加する方法

Linda Hamilton
リリース: 2025-01-01 02:12:16
オリジナル
937 人が閲覧しました

How to Efficiently Add a Sequential Counter Column to Grouped Pandas DataFrames Without Using a Callback Function?

コールバックを使用せずにグループ化された 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート