【发布时间】:2023-02-22 17:43:26
【问题描述】:
我有两个数据框如下
proj_df = pd.DataFrame({'reg_id':[1,2,3,4,5,6,7],
'partner': ['ABC_123','ABC_123','ABC_123','ABC_123','ABC_123','ABC_123','ABC_123'],
'part_no':['P123','P123','P123','P123','P123','P123','P123'],
'cust_info':['Apple','Apple','Apple','Apple','Apple','Apple','Tesla'],
'qty_1st_year':[100,100,600,150,50,0,10]})
order_df = pd.DataFrame({'partner': ['ABC_123','ABC_123','JKL_123','MNO_123'],
'part_no':['P123','P123','Q123','P567'],
'cust_info':['Apple','Hyundai','REON','Renault'],
'order_qty':[1000,600,50,0]})
我想做以下
a) 合并两个基于partner,part_no,cust_info的dataframes
b) 将order_qty 列从order_df 中拆分出来,并将适当的部分分配给名为assigned_qty 的新列
c) 适当的部分由qty_1st_year的百分比分配决定。意思是,对于每组partner,part_no and cust_info,您将个人qty_1st_year值除以Qty_1st_year的总和。
所以,我尝试了以下
sum_df = proj_df.groupby(['partner','part_no','cust_info'])['qty_1st_year'].sum().reset_index()
sum_df.columns = ['partner','part_no','cust_info','total_qty_all_project']
t1=proj_df.merge(order_df,on=['partner','part_no','cust_info'],how='left')
t2 = t1.merge(sum_df,on=['partner','part_no','cust_info'],how='left')
t2['pct_value'] = (t2['qty_1st_year']/t2['total_qty_all_project'])*100
proj_df['assigned_value'] = (t2['order_qty']*t2['pct_value'])/100
虽然这似乎工作正常,但我想知道是否有其他更好、更优雅的方法来完成这项任务。
我希望我的输出如下所示
【问题讨论】:
标签: python pandas list dataframe group-by