Pandas DataFrame のグループにシーケンシャル カウンター列を追加する
データ ラングリングのコンテキストでは、シーケンシャル カウンターを追加する一般的なタスクがあります。列をパンダ データフレーム内のグループに追加します。 1 つのアプローチは、これまでに示したようにコールバック関数を使用することです。
def callback(x): x['seq'] = range(1, x.shape[0] + 1) return x
この方法は機能しますが、別の関数を定義する必要があり、面倒になる可能性があります。より簡潔で洗練された解決策は、cumcount() メソッドを利用することです。
df.groupby(['c1', 'c2']).cumcount()
このメソッドは、各グループの累積カウントを計算し、グループ内の各行に連続番号を効果的に割り当てます。たとえば、次のデータフレームを考えてみます。
index | c1 | c2 | v1 |
---|---|---|---|
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 |
c1 と c2 でグループ化されたこのデータフレームにcumcount() を適用すると、次の結果が生成されます。
index | 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 |
代わりに 1 から順序付けを開始します。 0 の場合は、cumcount() の結果に 1 を加算するだけです:
df.groupby(['c1', 'c2']).cumcount() + 1
以上がPandas でグループ化されたデータにシーケンシャル カウンター列を効率的に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。