2列ずつpivot tableを作成し、最後に pd.DataFrame
を使って連結するのはいかがでしょうか.
以下,質問における「もとのデータを作成」を引用したコード例です:
import pandas as pd
# もとのデータを作成
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],
}
print(pd.DataFrame(data))
df = pd.DataFrame(data).set_index('No.')
pivot_list = []
for c_idx in range(0, len(df.columns)//2):
# 2列ずつ分割してpivot tableを作成
_df_split = df.iloc[:, 2 * c_idx:2*c_idx+2]
# renameメソッドによってカラム名「量*」を除去
_df_pivot = _df_split.pivot_table(values=[f'量{c_idx+1}'],
index='No.',
columns=f'材料{c_idx+1}',
aggfunc='sum',
fill_value=0).rename(columns={f'量{c_idx+1}':''})
pivot_list.append(_df_pivot)
print(pd.concat(pivot_list, axis=1))
最後のprint文で以下が出力されるはずです:
A B C D E F G
No.
1 100 0 0 5 0 0 0
2 200 0 0 0 2 0 0
3 0 50 0 0 0 3 0
4 0 0 100 0 0 0 7
以下を参考に回答しております: