質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

710閲覧

データフレームの表のカタチを変えたい。

nori0519

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/05/17 11:51

前提・実現したいこと

python下記のようなデータフレームscoreのカタチを、
'''
import pandas as pd
from pandas import DataFrame,Series

#score
data={
"名前":["浅田","今川","宇佐","江田","小野","加納","岸辺","倉田","剣持"],
"こくご":["79","75","49","99","96","94","48","21","88"],
"さんすう":["3","70","89","47","29","88","17","67","8"],
"えいご":["33","22","65","5","36","45","19","100","36"]
}
#データフレームscore
score=DataFrame(data)
'''
以下のような表のカタチにする関数を作ろうと考えています。
'''
名前|科目名 |点数
浅田|こくご |79
浅田|さんすう|3
浅田|えいご |33
今川|こくご |75 
今川|さんすう|70
今川|えいご |22
:   :   :
'''
このようなことは可能なのでしょうか。
ご教授いただければ、幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

pandas.DataFrame.melt()をお使い下さい

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.melt.html#pandas.DataFrame.melt

Python

1import pandas as pd 2from pandas import DataFrame,Series 3 4#score 5data={ 6"名前":["浅田","今川","宇佐","江田","小野","加納","岸辺","倉田","剣持"], 7"こくご":["79","75","49","99","96","94","48","21","88"], 8"さんすう":["3","70","89","47","29","88","17","67","8"], 9"えいご":["33","22","65","5","36","45","19","100","36"] 10} 11 12#データフレームscore 13score = DataFrame(data) 14ret = score.melt(id_vars='名前', var_name='科目名', value_name='点数') 15print(ret) 16# 名前 科目名 点数 17#0 浅田 こくご 79 18#1 今川 こくご 75 19#2 宇佐 こくご 49 20#3 江田 こくご 99 21#4 小野 こくご 96 22#5 加納 こくご 94 23#6 岸辺 こくご 48 24#7 倉田 こくご 21 25#8 剣持 こくご 88 26#9 浅田 さんすう 3 27#10 今川 さんすう 70 28#11 宇佐 さんすう 89 29#12 江田 さんすう 47 30#13 小野 さんすう 29 31#14 加納 さんすう 88 32#15 岸辺 さんすう 17 33#16 倉田 さんすう 67 34#17 剣持 さんすう 8 35#18 浅田 えいご 33 36#19 今川 えいご 22 37#20 宇佐 えいご 65 38#21 江田 えいご 5 39#22 小野 えいご 36 40#23 加納 えいご 45 41#24 岸辺 えいご 19 42#25 倉田 えいご 100 43#26 剣持 えいご 36

更に、出力を名前順にしたい場合は、DataFrame.sort_values() でソートします。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html

Python

1ret = ret.sort_values('名前', ignore_index=True)

【ふりがなを付けた例】

Python

1import pandas as pd 2from pandas import DataFrame,Series 3 4#score 5data={ 6"名前":["浅田","今川","宇佐","江田","小野","加納","岸辺","倉田","剣持"], 7"ふりがな":["あさだ","いまがわ","うさ","えだ","おの","かのう","きしべ","くらた","けんもち"], 8"こくご":["79","75","49","99","96","94","48","21","88"], 9"さんすう":["3","70","89","47","29","88","17","67","8"], 10"えいご":["33","22","65","5","36","45","19","100","36"] 11} 12 13#データフレームscore 14score = DataFrame(data) 15ret = score.melt(id_vars=['名前','ふりがな'], var_name='科目名', value_name='点数').sort_values('ふりがな', ignore_index=True) 16print(ret)

投稿2020/05/17 12:05

編集2020/05/17 12:52
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nori0519

2020/05/17 12:30

回答ありがとうございます。 同じようにコーディングしたところうまく表のカタチを変えることができました。ところで、名前順のほうも試したところ、 名前 科目名 点数 0 今川 こくご 75 1 今川 えいご 22 2 今川 さんすう 70 3 倉田 こくご 21 4 倉田 えいご 100 5 倉田 さんすう 67 6 剣持 えいご 36 7 剣持 こくご 88 8 剣持 さんすう 8 9 加納 えいご 45 10 加納 こくご 94 11 加納 さんすう 88 12 宇佐 こくご 49 13 宇佐 えいご 65 14 宇佐 さんすう 89 15 小野 えいご 36 16 小野 さんすう 29 17 小野 こくご 96 18 岸辺 こくご 48 19 岸辺 えいご 19 20 岸辺 さんすう 17 21 江田 さんすう 47 22 江田 えいご 5 23 江田 こくご 99 24 浅田 えいご 33 25 浅田 さんすう 3 26 浅田 こくご 79 このような順番となりました。この場合、別に五十音順のリストかまたは{名前: 読み仮名, ...}というような辞書を作成すべきなのでしょうか。
magichan

2020/05/17 12:46 編集

文字の場合文字コード順のソートになるので読み型通りにはなりません。読みがな順にソートしたいのであれば、データフレームに読みがなの列を追記するのが確実かと思います。
nori0519

2020/05/17 13:12

返信ありがとうございます。 上手く結果を出すことができました。 ありがとうございました。
guest

0

横持ちdfを縦持ちdfに変換するときはstack()メソッドが使えます。
Python: PandasのDataFrameを横持ち・縦持ちに変換する

投稿2020/05/17 11:54

gnbrganchan

総合スコア438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nori0519

2020/05/17 12:34

回答ありがとうございます。 一つの解決方法として参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問