パンダのデータフレームグループ/チャンクの標準化(行をすばやく挿入する方法)

ラオコーン

複数の行で記述された「オブジェクト」(テーブル内のいくつかの行でそれぞれ表されます)があります。しかし、問題は、オブジェクトが行を見逃すことがあるということです。私の目標は、各オブジェクトが同じ量の行(同じ形状)を持ち、オブジェクトの欠落している行が空の行で埋められるDataFrameを作成することです。

例えば:

オブジェクト1

O-ID | key 1 | key 2 | ... | key N  | value 1 | value 2 | value N
   0 | A 11  | A 21  | ... | key N1 |         |         | 
   0 | A 13  | A 23  | ... | key N3 |         |         | 
   0 | A 16  | A 26  | ... | key N6 |         |         | 

オブジェクト2

 O-ID | key 1 | key 2 | ... | key N  | value 1 | value 2 | value N
    1 | A 12  | A 22  | ... | key N2 |         |         | 
    1 | A 13  | A 23  | ... | key N3 |         |         | 
    1 | A 14  | A 24  | ... | key N4 |         |         |

「O-ID」はオブジェクトIDです。全部で6種類の行があることがわかります。結局、各オブジェクトに6行すべてを持たせたいと思います。key 1 .. key-Nは、キーと値のペア(値1 ...値N)の意味でのキーです。

結果は次のようになります。

オブジェクト1:

O-ID | key 1 | key 2 | ... | key N  | value 1 | value 2 | value N
   0 | A 11  | A 21  | ... | key N1 |         |         | 
   0 | A 12  | A 22  | ... | key N2 | Null    | Null    | Null
   0 | A 13  | A 23  | ... | key N3 |         |         | 
   0 | A 14  | A 24  | ... | key N4 | Null    | Null    | Null
   0 | A 15  | A 25  | ... | key N5 | Null    | Null    | Null
   0 | A 16  | A 26  | ... | key N6 |         |         | 

オブジェクト2:

O-ID | key 1 | key 2 | ... | key N  | value 1 | value 2 | value N
   1 | A 11  | A 21  | ... | key N1 | Null    | Null    | Null
   1 | A 12  | A 22  | ... | key N2 |         |         | 
   1 | A 13  | A 23  | ... | key N3 |         |         | 
   1 | A 14  | A 24  | ... | key N4 |         |         | 
   1 | A 15  | A 25  | ... | key N5 | Null    | Null    | Null
   1 | A 16  | A 26  | ... | key N6 | Null    | Null    | Null

遅いforループを使用する以外にこれを行う方法がわかりません...

欠落している行を見つけるためのより良い/より速い方法と、「Null」行を挿入する方法を知っていますか?

「O-ID」でグループ化して、グループの地図を使うというアイデアはもうありました。しかし、「null」行を正しい順序ですばやく挿入するにはどうすればよいですか?

私は最新のパンダバージョンと最新のPython3を使用しています

ステフ

まず、作成マルチインデックスを、我々は結果データフレームに必要なすべてのキーからresその後、我々は、インデックスを再作成、この新しいマルチインデックスと私たちのデータフレームを。最後のステップでは、キータプルを個々の列に変換し直し、列を並べ替えて、必要に応じて行を並べ替えます。

import pandas as pd

df = pd.DataFrame( {'O_ID': [0,0,0,1,1,1,2],
                    'key_1': ['A11', 'A13', 'A16', 'A12', 'A13', 'A14', 'A15'],
                    'key_2': ['A21', 'A23', 'A26', 'A22', 'A23', 'A24', 'A25'],
                    'key_n': ['key N1', 'key N3', 'key N6', 'key N2', 'key N3', 'key N4', 'key N5'],
                    'value_1': [11,12,13,14,15,16,17],
                    'value_2': [21,22,23,24,25,26,27],
                    'value_n': [121,122,123,124,125,126,127]
                    })

keycols = [c for c in df.columns if c.startswith('key')]
valcols = [c for c in df.columns if c.startswith('value')]

# create multiindex of all combinations of O_ID and key tuples
keys = df[keycols].apply(tuple, axis=1)
idx = pd.MultiIndex.from_product([df.O_ID.unique(), keys.unique()], names=['O_ID','key_tuples'])

# set index of O_ID and key tuples and reindex with new multiindex
res = df.set_index(['O_ID',keys]).drop(columns=keycols)
res = res.reindex(idx).reset_index()

# split key tuples back into individual columns and reorder/sort as needed
res = pd.DataFrame(res.key_tuples.to_list(), index=res.index, columns=keycols).join(res).drop(columns=['key_tuples'])
res = res.reindex(columns=['O_ID']+keycols+valcols).sort_values(['O_ID']+keycols)

結果:

    O_ID key_1 key_2   key_n  value_1  value_2  value_n
0      0   A11   A21  key N1     11.0     21.0    121.0
3      0   A12   A22  key N2      NaN      NaN      NaN
1      0   A13   A23  key N3     12.0     22.0    122.0
4      0   A14   A24  key N4      NaN      NaN      NaN
5      0   A15   A25  key N5      NaN      NaN      NaN
2      0   A16   A26  key N6     13.0     23.0    123.0
6      1   A11   A21  key N1      NaN      NaN      NaN
9      1   A12   A22  key N2     14.0     24.0    124.0
7      1   A13   A23  key N3     15.0     25.0    125.0
10     1   A14   A24  key N4     16.0     26.0    126.0
11     1   A15   A25  key N5      NaN      NaN      NaN
8      1   A16   A26  key N6      NaN      NaN      NaN
12     2   A11   A21  key N1      NaN      NaN      NaN
15     2   A12   A22  key N2      NaN      NaN      NaN
13     2   A13   A23  key N3      NaN      NaN      NaN
16     2   A14   A24  key N4      NaN      NaN      NaN
17     2   A15   A25  key N5     17.0     27.0    127.0
14     2   A16   A26  key N6      NaN      NaN      NaN

(キーA15の3番目のオブジェクトを追加する必要がありました。そうしないと、サンプルデータからこのキーの出所がわかりません。つまり、このメソッドは既存のすべてキーを使用します。すべてのキー値を事前に知っていて、結果を作成したい場合これらのキーを持つデータフレームは、入力データフレームで発生するかどうかに関係なく、入力データに存在する一意のキーの代わりに、これらの既知のキー値からマルチインデックスを作成できます)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダデータフレームのデータをすばやく正規化する方法は?

分類Dev

パンダデータフレームのデータをすばやく正規化する方法は?

分類Dev

パンダのデータフレーム行をordereddictにすばやく変換する方法

分類Dev

マルチインデックスのグループ化されたパンダデータフレームをフィルタリングする

分類Dev

パンダのマルチインデックスデータフレームをすべてのインデックスでグループ化する

分類Dev

パンダのデータフレームをグループ化し、現在の行の値なしで統計要約(平均と標準偏差)を計算する方法は?

分類Dev

空白行のパンダデータフレームを挿入する

分類Dev

キーでパンダのグループ化データフレームにアクセスする方法

分類Dev

パンダのデータフレームをタプルのリストにすばやく変換する方法

分類Dev

パンダのデータフレームにデータフレームを挿入する方法

分類Dev

パンダのデータフレームをすばやくネスト解除する方法

分類Dev

ReactNativeアプリのレルムデータベースにJSONをすばやく挿入する方法

分類Dev

パンダのデータフレームのグループ化と標準偏差

分類Dev

Python:パンダのデータフレームを特定の時間枠でグループ化する方法は?

分類Dev

Python:パンダのデータフレームを特定の時間枠でグループ化する方法は?

分類Dev

パンダのデータフレームをループし、データでグループ化する

分類Dev

Python-パンダデータフレームのリストに行をグループ化する

分類Dev

グループ化されたデータフレームパンダで特定の行を取得する

分類Dev

パンダ-データフレームで同じ値の行をグループ化する

分類Dev

パンダのデータフレームをグループ化してフィルタリングする

分類Dev

パンダデータフレームのインデックスは現在、2つの列の「グループ化」ですが、標準の数値インデックスを持つ独自の列として使用したいです。

分類Dev

xおよびy座標とタイムスタンプのパンダデータフレームのマルチインデックスを作成する

分類Dev

珍しい方法でパンダのデータフレームをグループ化する

分類Dev

グループ化されたパンダのデータフレームを操作する方法

分類Dev

パンダ - データフレームのサブ列をグループ化する方法は?

分類Dev

パンダデータフレームの先頭にミニ単位行列(行と列)を挿入する方法

分類Dev

データフレーム行をパンダグループバイのリストにグループ化する方法は?

分類Dev

空のパンダデータフレームにタプルを挿入する

分類Dev

グループ化せずにパンダのデータフレームの列のすべての行を連結する方法

Related 関連記事

  1. 1

    パンダデータフレームのデータをすばやく正規化する方法は?

  2. 2

    パンダデータフレームのデータをすばやく正規化する方法は?

  3. 3

    パンダのデータフレーム行をordereddictにすばやく変換する方法

  4. 4

    マルチインデックスのグループ化されたパンダデータフレームをフィルタリングする

  5. 5

    パンダのマルチインデックスデータフレームをすべてのインデックスでグループ化する

  6. 6

    パンダのデータフレームをグループ化し、現在の行の値なしで統計要約(平均と標準偏差)を計算する方法は?

  7. 7

    空白行のパンダデータフレームを挿入する

  8. 8

    キーでパンダのグループ化データフレームにアクセスする方法

  9. 9

    パンダのデータフレームをタプルのリストにすばやく変換する方法

  10. 10

    パンダのデータフレームにデータフレームを挿入する方法

  11. 11

    パンダのデータフレームをすばやくネスト解除する方法

  12. 12

    ReactNativeアプリのレルムデータベースにJSONをすばやく挿入する方法

  13. 13

    パンダのデータフレームのグループ化と標準偏差

  14. 14

    Python:パンダのデータフレームを特定の時間枠でグループ化する方法は?

  15. 15

    Python:パンダのデータフレームを特定の時間枠でグループ化する方法は?

  16. 16

    パンダのデータフレームをループし、データでグループ化する

  17. 17

    Python-パンダデータフレームのリストに行をグループ化する

  18. 18

    グループ化されたデータフレームパンダで特定の行を取得する

  19. 19

    パンダ-データフレームで同じ値の行をグループ化する

  20. 20

    パンダのデータフレームをグループ化してフィルタリングする

  21. 21

    パンダデータフレームのインデックスは現在、2つの列の「グループ化」ですが、標準の数値インデックスを持つ独自の列として使用したいです。

  22. 22

    xおよびy座標とタイムスタンプのパンダデータフレームのマルチインデックスを作成する

  23. 23

    珍しい方法でパンダのデータフレームをグループ化する

  24. 24

    グループ化されたパンダのデータフレームを操作する方法

  25. 25

    パンダ - データフレームのサブ列をグループ化する方法は?

  26. 26

    パンダデータフレームの先頭にミニ単位行列(行と列)を挿入する方法

  27. 27

    データフレーム行をパンダグループバイのリストにグループ化する方法は?

  28. 28

    空のパンダデータフレームにタプルを挿入する

  29. 29

    グループ化せずにパンダのデータフレームの列のすべての行を連結する方法

ホットタグ

アーカイブ