以下のデータフレームがあり、パーセンテージ列のパーセンテージに基づいて、val 列の合計値を Cat 列に戻したいと考えています。
Country State City Cat Total amount Percentage val1 val2 val3 val4
US FL MIA cat1 100 10
US FL MIA cat2 850 85
US FL MIA cat3 50 5
US FL MIA tot cat 1000 100 200 30 400 120
US GA ATL cat1 200 40
US GA ATL cat2 300 60
US GA ATL tot cat 500 100 100 50 20 30
US NY NY tot cat 100 100 0 20 5 15
Canada MB WPG cat1 250 50
Canada MB WPG cat2 250 50
Canada MB WPG tot cat 500 100 50 550 40 160
Canada QC YUL cat1 500 33,33
Canada QC YUL cat2 1000 66,66
Canada QC YUL tot cat 1500 100 1000 250 500 60
合計行を取得し、グループごとのパーセンテージを入力することもでき、いくつかの列に基づいて2つのデータフレームをマージすることはうまくいきましたが、今は立ち往生しています...
望ましい出力:
Country State City Cat Total amount Percentage val1 val2 val3 val4
US FL MIA cat1 100 10 20 3 40 12
US FL MIA cat2 850 85 170 25,5 340 102
US FL MIA cat3 50 5 10 1,5 20 6
US FL MIA tot cat 1000 100 200 30 400 120
US GA ATL cat1 200 40 40 20 8 12
US GA ATL cat2 300 60 60 30 12 18
US GA ATL tot cat 500 100 100 50 20 30
US NY NY tot cat 100 100 0 20 5 15
Canada MB WPG cat1 250 50 25 275 20 80
Canada MB WPG cat2 250 50 25 275 20 80
Canada MB WPG tot cat 500 100 50 550 40 160
Canada QC YUL cat1 500 33,33 333,33 83,32 166,65 19,99
Canada QC YUL cat2 1000 66,66 666,66 166,65333,33 39,99
Canada QC YUL tot cat 1500 100 1000 250 500 60
または、マージを行うときに値を計算/分散する必要がありますか? 私は助けが必要です...
編集:入力データを提供しました。
pd.DataFrame([{'Country': 'US', 'State': 'FL', 'City': 'MIA', 'Cat': 'cat1', 'Total Amount': 100, 'Percentage': 10 },
{'Country': 'US', 'State': 'FL', 'City': 'MIA', 'Cat': 'cat2','Total Amount': 850, 'Percentage': 85 },
{'Country': 'US', 'State': 'FL', 'City': 'MIA', 'Cat': 'cat3','Total Amount': 50, 'Percentage': 5 },
{'Country': 'US', 'State': 'FL', 'City': 'MIA', 'Cat': 'Tot Cat','Total Amount': 1000, 'Percentage': 100, 'val1': 200, 'val2': 30, 'val3': 400, 'val4': 120},
{'Country': 'US', 'State': 'GA', 'City': 'ATL', 'Cat': 'cat1','Total Amount': 200, 'Percentage': 40 },
{'Country': 'US', 'State': 'GA', 'City': 'ATL', 'Cat': 'cat2','Total Amount': 300, 'Percentage': 60 },
{'Country': 'US', 'State': 'GA', 'City': 'ATL', 'Cat': 'Tot Cat','Total Amount': 500, 'Percentage': 100, 'val1': 100, 'val2': 50, 'val3': 20, 'val4': 30},
{'Country': 'US', 'State': 'NY', 'City': 'ATL', 'Cat': 'Tot Cat','Total Amount': 100, 'Percentage': 100, 'val1': 0, 'val2': 20, 'val3': 5, 'val4': 15},
{'Country': 'Canada', 'State': 'MB', 'City': 'WPG', 'Cat': 'cat1', 'Total Amount': 250, 'Percentage': 50 },
{'Country': 'Canada', 'State': 'MB', 'City': 'WPG', 'Cat': 'cat2', 'Total Amount': 250, 'Percentage': 50 },
{'Country': 'Canada', 'State': 'MB', 'City': 'WPG', 'Cat': 'Tot Cat', 'Total Amount': 500, 'Percentage': 100, 'val1': 50 , 'val2': 550, 'val3': 40, 'val4': 160},
{'Country': 'Canada', 'State': 'QC', 'City': 'YUL', 'Cat': 'cat1', 'Total Amount': 500, 'Percentage': 33.33 },
{'Country': 'Canada', 'State': 'QC', 'City': 'YUL', 'Cat': 'cat2', 'Total Amount': 1000, 'Percentage': 66.66 },
{'Country': 'Canada', 'State': 'QC', 'City': 'YUL', 'Cat': 'Tot Cat', 'Total Amount': 1500, 'Percentage': 100, 'val1': 1000 , 'val2': 250, 'val3': 500, 'val4': 60 }])