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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

解決済

2回答

640閲覧

Python データフレームの行列の入れ替え

aya0425

総合スコア8

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2022/02/28 08:17

データ分析を最近始めた者です。
一見簡単そうに見えるPythonの データフレームの行列の入れ替えができずとても困っています。

現状

手元に以下のデータフレームがあります。

項目市町村ID期間
貧困率12019年5.0%
貧困率12020年5.5%
貧困率22019年3.0%
貧困率22020年3.5%
犯罪率12019年1.0%
犯罪率12020年1.5%
犯罪率22019年2.0%
犯罪率22020年2.5%
平均年収12019年300万円
平均年収12020年350万円
平均年収22019年400万円
平均年収22020年450万円

やりたいこと

上記のデータフレームを下記のように加工しようとしています。

市町村ID期間貧困率犯罪率平均年収
12019年5.0%1.0%300万円
12020年5.5%1.5%350万円
22019年3.0%2.0%400万円
22020年3.5%2.5%450万円

pandasの転置などを試したのですが上手く行かずとても困っています。
お手数ですが、解決方法をご存知の方がいらっしゃいましたらご教示いただけますと幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

現状のデータの形を「縦持ち」、やりたいことの形を「横持ち」と呼びます。
(他にも呼び方はいろいろあるので検索してみてください)

pandasで、縦持ちから横持ちへの変換は、いろんな方法がありますが、今回のケースではpandas.pivotを使うと簡単です。

python

1df2 = pd.pivot(df, index=['市町村ID', '期間'], columns='項目', values='値') 2df2 = df2[['貧困率', '犯罪率', '平均年収']].reset_index()

こちらのページ(https://note.nkmk.me/python-pandas-stack-unstack-pivot/)が詳しいです。

投稿2022/02/28 14:27

bsdfan

総合スコア4571

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

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

aya0425

2022/02/28 18:11

ご教示いただいたコードで上手く欲しいデータ形式に変換できました。 大変助かりました!縦持ちと横持ちの概念も大変勉強になりました!
guest

0

python

1import pandas as pd 2import io 3 4pd.set_option('display.unicode.east_asian_width', True) 5 6csv_data = ''' 7項目,市町村ID,期間,値 8貧困率,1,2019年,5.0% 9貧困率,1,2020年,5.5% 10貧困率,2,2019年,3.0% 11貧困率,2,2020年,3.5% 12犯罪率,1,2019年,1.0% 13犯罪率,1,2020年,1.5% 14犯罪率,2,2019年,2.0% 15犯罪率,2,2020年,2.5% 16平均年収,1,2019年,300万円 17平均年収,1,2020年,350万円 18平均年収,2,2019年,400万円 19平均年収,2,2020年,450万円 20''' 21df = pd.read_csv(io.StringIO(csv_data)) 22 23# 24column_order = ['貧困率', '犯罪率', '平均年収'] 25result = ( 26 df.groupby(['市町村ID', '期間']) 27 .apply(lambda x: x.set_index('項目').reindex(column_order)['値']) 28 .reset_index() 29 .rename_axis(None, axis=1)) 30 31print(result) 32 33# 34 市町村ID 期間 貧困率 犯罪率 平均年収 350 1 20195.0% 1.0% 300万円 361 1 20205.5% 1.5% 350万円 372 2 20193.0% 2.0% 400万円 383 2 20203.5% 2.5% 450万円

投稿2022/02/28 09:28

編集2022/02/28 09:44
melian

総合スコア19803

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

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

aya0425

2022/02/28 18:10

ご教示いただいたコードでうまく変形できました。大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問