合并行和计数值[关闭]

问题描述 投票:-1回答:1

我有一个与此类似的数据框:

OrderNum Product Quantity

1 Gum 2

1 Candy 4

2 Chocolate 8

3 Gum 3

3 Soda 1

4 Chocolate 2

5 Gum 2

5 Soda 2

对于订购的每种产品,我想根据订单号相同,找出其他产品和订购的产品数量。

我想看到这样的事情:

Gum 7 Candy 4 Soda 3

Candy 4 Gum 2

Chocolate 10

etc.

感谢您的帮助!

康纳

python merge count row
1个回答
0
投票

听起来你想要做的就是找到每个元素之间的关联。如果两个(或更多)订单具有“Candy”,则它们包含的每个其他产品有多少。

这是我能想到的最好的。首先,按每个产品分组,以查找具有该产品的所有订单。然后,从原始数据帧中获取该子集,并获得每个产品的数量总和。

# group by the products
products = df.groupby("Product")

# each groupby element is a tuple
# the first entry is the value (in this case, the Product)
# the second is a dataframe
# iterate through each of these groups
for p in products:
  sub_select = df[df["OrderNum"].isin(p[1]['OrderNum'])]
  quantities = sub_select.groupby("Product").Quantity.sum()

  # print the name of the product that we grouped by
  # and convert the sums to a dictionary for easier reading
  print(p[0], quantities.to_dict())
  # Candy :  {'Candy': 4, 'Gum': 2}
  # Chocolate :  {'Chocolate': 10}
  # Gum :  {'Candy': 4, 'Soda': 3, 'Gum': 7}
  # Soda :  {'Soda': 3, 'Gum': 5}

sub_select将成为我们原始数据帧的子集。例如,它将包含所有具有Candy的订单的所有行。然后,quantities将所有这些订单组合在一起,以获得所有匹配订单中每种产品的数量总和。

© www.soinside.com 2019 - 2024. All rights reserved.