Pythonによる一覧表の改変方法について
Q&A
Closed
解決したいこと
ここに解決したい内容を記載してください。
下図、左の表のように、材料の種類・量をまとめたエクセルファイルがあります。
これを右の表のように、各要素ごとに抽出して並べ替えたいと思っています。
今あるデータ 作り直したいデータ
No. 材料1 量 材料2 量 ・・・ No. A B C 甲 乙 丙 丁 ・・・
1 A 100 甲 5 1 100 0 0 5 0 0 0
2 A 200 乙 2 2 200 0 0 0 2 0 0
3 B 50 丙 3 3 0 50 0 0 0 3 0
4 C 100 丁 7 4 0 0 100 0 0 0 7
・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・
pd.read_excelにてDataFrameとして読み込むことは出来ました。
欠測値はdf.fillna(0)にて補完しようと思いますが、
肝心の行列の入れ替えや、
材料ごとに列を作って、そこに該当する量を入力する方法が全く検討つかず、
アドバイスを頂ければと思います。
よろしくお願いいたします。
少し調べて、pivot_tableが使えそうな気もしたのですが、
以下のように記載すると(甲乙丙丁をD,E,F,Gに変更)、
ちょっと意図したものとは違ってしまいます。
(出力結果)
量1_A 量1_B 量1_C 量2_A 量2_B 量2_C
No.
1 100 0 0 5 0 0
2 200 0 0 2 0 0
3 0 50 0 0 3 0
4 0 0 100 0 0 7
# もとのデータを作成
data = {
'No.': [1, 2, 3, 4],
'材料1': ['A', 'A', 'B', 'C'],
'量1': [100, 200, 50, 100],
'材料2': ['D', 'E', 'F', 'G'],
'量2': [5, 2, 3, 7]
}
df = pd.DataFrame(data)
# 新しいデータフレームを作成
new_df = pd.pivot_table(df, values=['量1', '量2'], index='No.', columns='材料1', aggfunc='sum', fill_value=0)
# 列名の整理
new_df.columns = [f'{col[0]}_{col[1]}' for col in new_df.columns]
# 結果の表示
print(new_df)