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

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

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

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

pandas

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

Q&A

解決済

2回答

1735閲覧

行列形式からのXYZ形式への変換

TTTTT_KU

総合スコア7

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2018/03/12 10:44

前提・実現したいこと

行列形式からのXYZ形式への変換

Python環境(Pandasのデータフレーム)で

X1 X2 X3 X4

Y1 Z11 Z21 Z31 Z41
Y2 Z12 Z22 Z32 Z42
Y3 Z13 Z23 Z33 Z43
のようなCSVファイルを読み込み、
X1 Y1 Z11
X2 Y1 Z21
X3 Y1 Z31

X4 Y3 Z43
のようなリストにして出力したいです。

発生している問題・エラーメッセージ

データフレームにデータ部だけを読み込むことはできましたが、その後が検討がつきません。

該当のソースコード

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

pandas.melt()をお使いください

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.melt.html

Python

1import pandas as pd 2 3df = pd.DataFrame( 4 [['Z11','Z21','Z31','Z41'],['Z12','Z22','Z32','Z42'],['Z13','Z23','Z33','Z43']], 5 index = ['Y1','Y2','Y3'], 6 columns = ['X1','X2','X3','X4']) 7 8print(df) 9# X1 X2 X3 X4 10#Y1 Z11 Z21 Z31 Z41 11#Y2 Z12 Z22 Z32 Z42 12#Y3 Z13 Z23 Z33 Z43 13 14ret = pd.melt(df.reset_index(), id_vars='index', var_name='X', value_name='Z') 15ret = ret.rename(columns={'index':'Y'}) #必用に応じて 16print(ret) 17# Y X Z 18#0 Y1 X1 Z11 19#1 Y2 X1 Z12 20#2 Y3 X1 Z13 21#3 Y1 X2 Z21 22#4 Y2 X2 Z22 23#5 Y3 X2 Z23 24#6 Y1 X3 Z31 25#7 Y2 X3 Z32 26#8 Y3 X3 Z33 27#9 Y1 X4 Z41 28#10 Y2 X4 Z42 29#11 Y3 X4 Z43

投稿2018/03/12 11:13

編集2018/03/12 23:11
magichan

総合スコア15898

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

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

TTTTT_KU

2018/03/13 03:59

教えてくださりありがとうございました。 できました。
guest

0

Pandasでのテクニカルなことはよく知らないので、簡単に全要素をfor文で集めて行く方法で書いてみました。.iterrows().iteritems()で一列、もしくは一行ずつ処理できます。

python

1>>> df = pd.DataFrame({"X1":[0,1,2], "X2":[3,4,5], "X3":[7,8,9]}) 2>>> df.index = ["Y1", "Y2", "Y3"] 3 4>>> df 5 X1 X2 X3 6Y1 0 3 7 7Y2 1 4 8 8Y3 2 5 9 9 10>>> res = [] 11>>> for x, row in df.iteritems(): 12... res.extend([x, y, z] for y, z in row.iteritems()) 13>>> res 14[['X1', 'Y1', 0], ['X1', 'Y2', 1], ['X1', 'Y3', 2], ['X2', 'Y1', 3], ['X2', 'Y2', 4], ['X2', 'Y3', 5], ['X3', 'Y1', 7], ['X3', 'Y2', 8], ['X3', 'Y3', 9]] 15

投稿2018/03/12 10:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

TTTTT_KU

2018/03/13 03:59

for分を使った方法でもできました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問