1

私は、MySQL テーブルのグループから、MultiIndex を使用して Pandas DataFrame にいくつかのデータを取り込もうとしています。表はおおよそ次のようになります。

create table team (
  teamID           integer        NOT NULL,
  teamName         varchar(64)    NOT NULL,
  primary key      (teamID));

create table coach (
  coachID          integer        NOT NULL,
  teamID           integer        NOT NULL,
  coachName        varchar(64)    NOT NULL,
  primary key      (coachID));

create table player (
  playerID         integer        NOT NULL,
  teamID           integer        NOT NULL,
  playerName       varchar(64)    NOT NULL,
  primary key      (playerID));

各チームには、1 人以上のコーチと 1 人以上のプレーヤーを含めることができます。

SELECT と MERGE は次のとおりです。

import mysql.connector
connection = mysql.connector.connect(user='root', passwd='temp', database='mydb')
team =    sql.read_frame('select * from team;',   connection)
coach =   sql.read_frame('select * from coach;',  connection)
player =  sql.read_frame('select * from player;', connection)
connection.close()

df = pd.merge(
        pd.merge(team, coach,     on='teamID'),
        player,                   on='teamID')

DataFrame は次のようになります。

In [2]: df
Out[2]: 
    teamID teamName  coachID         coachName  playerID      playerName
0        1      Red        1      Rachel Evans         1       Carol Lee
1        1      Red        1      Rachel Evans         2  Abigail O'Neil
2        1      Red        1      Rachel Evans         3      Becky Hood
3        1      Red        1      Rachel Evans         4  Bridget Sawyer
4        1      Red        2       Gladys Nenn         1       Carol Lee
5        1      Red        2       Gladys Nenn         2  Abigail O'Neil
6        1      Red        2       Gladys Nenn         3      Becky Hood
7        1      Red        2       Gladys Nenn         4  Bridget Sawyer
8        2    Green        3     Reina Stevens         5        Amy Reid
9        2    Green        3     Reina Stevens         6     Angie Costa
10       2    Green        3     Reina Stevens         7     Annie Reese
11       2    Green        3     Reina Stevens         8      Barbara Lo
12       2    Green        4         Jill Hunt         5        Amy Reid
13       2    Green        4         Jill Hunt         6     Angie Costa
14       2    Green        4         Jill Hunt         7     Annie Reese
15       2    Green        4         Jill Hunt         8      Barbara Lo
16       3     Blue        5       Lynn Peters         9    Alicia Green
17       3     Blue        5       Lynn Peters        10      Beth Spire
18       3     Blue        5       Lynn Peters        11  Candace Pierce
19       3     Blue        5       Lynn Peters        12    Carmen Jones
20       3     Blue        6  Stephanie Lenter         9    Alicia Green
21       3     Blue        6  Stephanie Lenter        10      Beth Spire
22       3     Blue        6  Stephanie Lenter        11  Candace Pierce
23       3     Blue        6  Stephanie Lenter        12    Carmen Jones

そして今、このデータを次のように整形する MultiIndex を作成したいと思います。

In [2]: df
Out[2]: 
teamID teamName  coachID  coachName  playerID      playerName
    1  Red        1      Rachel Evans    1       Carol Lee
                  2      Gladys Nenn     2       Abigail O'Neil
                                         3       Becky Hood
                                         4       Bridget Sawyer
    2  Green      3      Reina Stevens   5       Amy Reid
                  4      Jill Hunt       6       Angie Costa
                                         7       Annie Reese
                                         8       Barbara Lo

私はこれを直接の Python で実行できましたが、Pandas の強力で簡潔なインデックス作成機能を利用できるようにしたいと考えています。

以下を追加

df.set_index(['teamID', 'teamName', 'coachID', 'coachName', 'playerID'], inplace=True)

最初の 4 つの列を階層化します。ただし、最後の 2 つの列はまだ複製されています。

                                                       playerName
teamID teamName coachID coachName        playerID                
1      Red      1       Rachel Evans     1              Carol Lee
                                         2         Abigail O'Neil
                                         3             Becky Hood
                                         4         Bridget Sawyer
                2       Gladys Nenn      1              Carol Lee
                                         2         Abigail O'Neil
                                         3             Becky Hood
                                         4         Bridget Sawyer
2      Green    3       Reina Stevens    5               Amy Reid
                                         6            Angie Costa
                                         7            Annie Reese
                                         8             Barbara Lo
                4       Jill Hunt        5               Amy Reid
                                         6            Angie Costa
                                         7            Annie Reese
                                         8             Barbara Lo
4

0 に答える 0