csvで保存された学生のテスト結果のデータがあるとします(下の例を参照)。
Classをキーにして辞書型に変換して処理したいと考えています。
(キーごとに条件を指定してデータを抽出するのを目的としています。)
その際、1つのキーに対して値が入った複数のリストを持たせたいと考えていますが上手くいきません。
素人質問で恐縮ですが、分かる方いらっしゃったらご教授お願いいたします。
【テスト結果のデータ】
Class | Name | English | Math | Science | Society |
---|---|---|---|---|---|
A | 田中 | 63 | 75 | 68 | 82 |
A | 山田 | 74 | 72 | 83 | 86 |
B | 高橋 | 59 | 65 | 71 | 81 |
B | 佐藤 | 70 | 71 | 74 | 81 |
C | 吉田 | 66 | 72 | 61 | 73 |
C | 斎藤 | 72 | 67 | 58 | 69 |
C | 小池 | 60 | 78 | 61 | 66 |
D | 高田 | 88 | 91 | 92 | 80 |
D | 橋本 | 60 | 79 | 68 | 77 |
D | 工藤 | 79 | 83 | 85 | 90 |
試したこと
以下のコードのように試しましたが、少し複雑な形に変換されます。
必要ない列名がキーになって取得されるのを防ぎたいです。
python
1import pandas as pd 2df1 = pd.read_csv('input.csv') 3df1 4"""出力 5|Class|Name|English|Math|Science|Society| 6| A |田中| 63 | 75 | 68 | 82 | 7| A |山田| 74 | 72 | 83 | 86 | 8| B |高橋| 59 | 65 | 71 | 81 | 9| B |佐藤| 70 | 71 | 74 | 81 | 10| C |吉田| 66 | 72 | 61 | 73 | 11| C |斎藤| 72 | 67 | 58 | 69 | 12| C |小池| 60 | 78 | 61 | 66 | 13| D |高田| 88 | 91 | 92 | 80 | 14| D |橋本| 60 | 79 | 68 | 77 | 15| D |工藤| 79 | 83 | 85 | 90 | 16""" 17result = {} 18for c in df1["Class"].unique(): 19 df_part = df1[df1["Class"]==c] 20 result[c] = {} 21 for col in df_part.columns: 22 if col == "Class": 23 continue 24 result[c][col] = [*df_part[col].values] 25result
試した結果
python
1{'A': {'Name': ['山田', '田中'], 2 'English': [1, 2], 3 'Math': [11, 12], 4 'Science': [21, 22], 5 'Society': [31, 32]}, 6 'B': {'Name': ['佐藤', '吉田'], 7 'English': [3, 4], 8 'Math': [13, 14], 9 'Science': [23, 24], 10 'Society': [33, 34]}, 11 'C': {'Name': ['工藤', '田中', '斉藤'], 12 'English': [5, 6, 7], 13 'Math': [15, 16, 17], 14 'Science': [25, 26, 27], 15 'Society': [35, 36, 37]}, 16 'D': {'Name': ['高橋', '小池', '橋本\u3000'], 17 'English': [8, 9, 10], 18 'Math': [18, 19, 20], 19 'Science': [28, 29, 30], 20 'Society': [38, 39, 40]}}
本来得たい結果
Python
1df = {'A':[ ['田中', 63, 75, 68, 82], ['山田', 74, 72, 83, 86] ], 'B':[ ['高橋', 59, 65, 71, 81], ['佐藤', 70, 71, 74, 81] ], 2 'C':[ ['吉田', 66, 72, 61, 73], ['斉藤', 72, 67, 58, 69], ['小池', '60', '78', '61', '66'] ], 3 'D':[ ['高田', 88, 91, 92, 80], ['橋本', 60, 79, 68, 77], ['工藤', 79, 83, 85, 90] ]}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/03 14:59 編集
2020/07/03 15:12
2020/07/03 15:37