我希望将此数据框分组,以便price_1和price_2位于同一行,然后我想使用类似reset_index的东西,而不对分组对象应用任何计算,并创建一个新的数据框,然后将价格1添加到价格2 .
在我看来,我正在尝试执行类似 sql 的操作,其中我使用子查询来应用我的 groupby,然后对其进行计算。
在 python 中,groupby 的工作方式迫使您创建多个组,然后将它们重新组合在一起,但我希望将较大的数据帧减少到共享和使用 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)
最佳答案
如果我理解正确的话,这可能就是您正在寻找的:
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
关于python - 使用 groupby 创建新的数据框,而不必对该 groupby 对象应用任何计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41773106/