python - 使用 groupby 创建新的数据框,而不必对该 groupby 对象应用任何计算

标签 python pandas group-by

我希望将此数据框分组,以便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/

相关文章:

python - Pandas:根据平面列的值设置多列值

json - 在 PostgreSQL 中聚合 JSON

python - 在元组列表中搜索最小值

python - 如何在Python中的列表的每个元素中添加常量字符串?

python - 为什么这些数据类型比较相等但散列不同?

python - 在python dict中获取对应于max(value)的Key(s)

python - Pandas:在数据框中创建两个新列,其值是从预先存在的列中计算出来的

Python - 从 pandas df 中的字符串中提取多个值

mysql查询性能帮助

python - Pandas 按时间分组,指定开始时间非整数分钟