我有以下数据框,我想根据 Percentage 列中的百分比将 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
我得到了总行,我还设法输入了每组的百分比并根据几列合并两个数据框很好,但现在我卡住了......
期望的输出:
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 }])