前提
最近仕事でPandasを使用している、Pandas初心者です。
簡単な操作はできるのですが、大きくデータを加工することが初めてでイマイチプログラムの書き方がわからない為teratailで質問しました。
とっかかりが掴めず、最初の処理以前の段階で止まってしまっています。知っている方にプログラムの書き方を教えていただきたいです。
データフレームの中身は質問の為少なくしていますが、実際のデータ量は3万行ほどの予定です。
実現したいこと
以下のデータフレームがあります。
国 | 英語問題数 | 英語正答数 | 国語問題数 | 国語正答数 |
---|---|---|---|---|
Japan | 20 | 8 | 30 | 26 |
America | 20 | 18 | 30 | 4 |
Japan | 20 | 12 | 30 | 28 |
Japan | 20 | 17 | 30 | 25 |
America | 20 | 19 | 30 | 18 |
America | 20 | 16 | 30 | 20 |
Japan | NaN | NaN | 30 | 30 |
Japan | 20 | 13 | 30 | 25 |
China | 20 | 16 | 30 | 24 |
America | 20 | 20 | NaN | NaN |
Japan | 20 | 5 | 30 | 25 |
Japan | 20 | 14 | 30 | 25 |
America | 20 | 15 | 30 | 20 |
Japan | 20 | 8 | 30 | 18 |
America | NaN | NaN | 30 | 7 |
上記のデータフレームを以下のデータフレームの形にまとめたいです。
具体的には1Seriesを国毎とし、人数、問題数、平均正答数、平均正答率、中央値、標準偏差の列を持つデータフレームを新たに作成したいです。
国 | 英語人数 | 英語問題数 | 英語平均正答数 | 英語平均正答率 | 英語中央値 | 英語標準偏差 | 国語人数 | 国語問題数 | 国語平均正答数 | 国語平均正答率 | 国語中央値 | 国語標準偏差 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Japan | 7 | 20 | 11 | 0.55 | 8 | 30 | 25.25 | 0.84 | ||||
America | 5 | 20 | 17.6 | 0.88 | 5 | 30 | 13.8 | 0.46 | ||||
Total | 13 | 20 | 13.9 | 0.7 | 14 | 30 | 22.7 | 0.7 |
※中央値、標準偏差の値も必要です。
考えたこと
新たにデータフレームを作る方法が分からず、手がかりがない状態なのですが、
おそらく最初の処理として国毎にグループ化するとうまくいきそうだと考え、関数を探しました。
ただ、その後でわからなくなってしまいました。
df.groupby() df.median() df.mean() df.std()
元となるデータフレーム
Python
1import pandas as pd 2import numpy as np 3 4df = pd.DataFrame( 5 data=np.array([["Japan", 20, 8, 30, 26], 6 ["America", 20, 18, 30, 4], 7 ["Japan", 20, 12, 30, 28], 8 ["Japan", 20, 17, 30, 25], 9 ["America", 20, 19, 30, 18], 10 ["America", 20, 16, 30, 20], 11 ["Japan", "", "", 30, 30], 12 ["Japan", 20, 13, 30, 25], 13 ["China", 20, 16, 30, 24], 14 ["America", 20, 20, "", ""], 15 ["Japan", 20, 5, 30, 25], 16 ["Japan", 20, 14, 30, 25], 17 ["America", 20, 15, 30, 20], 18 ["Japan", 20, 8, 30, 18], 19 ["America", "", "", 30, 7]]), 20 columns=['国', '英語問題数', '英語正答数', '国語問題数', '国語正答数'] 21 )
補足情報(FW/ツールのバージョンなど)
Windows10
Anaconda
Python 3.9.13
pandas 1.5.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/01 00:08