我希望对此数据框进行分组,以便price_1和price_2位于同一行,然后我想使用类似reset_index的内容而不对分组对象应用任何计算并创建新数据框然后将价格1添加到价格2 。
在我看来,我试图做一些类似sql的事情,我使用子查询来应用我的groupby,然后对其进行计算。
在python中,groupbys以一种强制你创建多个组然后将它们重新组合在一起的方式工作,但我希望将较大的数据帧减少到item_number,prod_name和comp共享的位置并使用该新数据帧然后运行一些计算。
另一种看待这种情况的方法可能是在组内添加这些列,并创建一个新的列,然后以某种方式将其重新组合在一起。
d = {
'item_number':[1234,56789,2468,1234,56789,2468],
'prod_name':['prod_a','prod_b','prod_c','prod_a','prod_b','prod_c'],
'comp':['comp_a','comp_b','comp_c','comp_a','comp_b','comp_c'],
'price_1':[20.00,16.69,36.21,0,0,0],
'price_2':[0,0,0,5,7,3.69]}
df = pd.DataFrame(data=d)
期望的输出:
d = {
'item_number':[1234,56789,2468],
'prod_name':['prod_a','prod_b','prod_c'],
'comp':['comp_a','comp_b','comp_c'],
'price_1':[20.00,16.69,36.21,0,0,0],
'price_2':[5,7,3.69]}
df = pd.DataFrame(data=d)
答案 0 :(得分:1)
如果我理解正确,这可能就是你要找的东西:
print(df.groupby(['item_number', 'comp'])['price_1', 'price_2'].sum())
输出:
price_1 price_2
item_number comp
1234 comp_a 20.00 5.00
2468 comp_c 36.21 3.69
56789 comp_b 16.69 7.00
如果您希望将其作为新数据框并对价格列值求和,则可以执行以下操作:
new_df = df.groupby(['item_number', 'comp'])['price_1', 'price_2'].sum()
new_df['total'] = new_df.price_1 + new_df.price_2
print(new_df)
输出:
price_1 price_2 total
item_number comp
1234 comp_a 20.00 5.00 25.00
2468 comp_c 36.21 3.69 39.90
56789 comp_b 16.69 7.00 23.69