首页 > 解决方案 > 通过比较 pandas 中的两个数据框来计算数据转换百分比

问题描述

我有一个输入数据框,它在不同的帐户中有一些固定的百分比。

df1:

Product AU-MGT  AU-STG  AU-PRD  
prod1   20      60      70  
prod2   80      40      30  

另一个数据框是: df2

       Account Product  cost
0       AU-MGT  COMMON  4
1       AU-STG  COMMON  6
2       AU-PRD  COMMON  8

df2 仅气体一种产品-'COMMON'。我想根据百分比数据框在帐户和不同产品之间分配共同成本。我想要的输出是:

       Account Product  cost
0       AU-MGT  prod-1  0.8
1       AU-MGT  prod-2  3.2
2       AU-STG  prod-1  3.6
3       AU-STG  prod-2  2.4
4       AU-PRD  prod-1  5.6
5       AU-PRD  prod-2  2.4

如何使用熊猫实现这一目标?我尝试使用 df1 的 dataframe.unstack()。

标签: python-3.xpandasdataframe

解决方案


你需要先transposedf1unstack然后merge用 df2 操作:

df1=pd.DataFrame({'prod':['prod1','prod2'],'AU-MGT':[20,80],'AU-STG':[60,40],'AU-PRD':[70,30]})
df2=pd.DataFrame({'Account':['AU-MGT','AU-STG','AU-PRD'],'Product':['COMMON','COMMON','COMMON'],'Cost':[4,6,8]})
df1=df1.set_index('prod').T.unstack().reset_index()
df1.columns=['prod','Account','Cost%']
df_new=df1.merge(df2,how='outer')
df_new['Cost_new']=df_new['Cost']*(df_new['Cost%']/100)
df_new=df_new[['Account','prod','Cost_new']]

Out[89]: 
  Account   prod  Cost_new
0  AU-MGT  prod1       0.8
1  AU-MGT  prod2       3.2
2  AU-STG  prod1       3.6
3  AU-STG  prod2       2.4
4  AU-PRD  prod1       5.6
5  AU-PRD  prod2       2.4

推荐阅读