2017-12-27 32 views
-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. 

が助けてくれてありがとう!

コナー

+0

私はあなたの予想される出力に混乱しています。キャンディー4、ガム2はどうやって手に入りましたか? 1行目と最後の行は私にとって意味があります(これは、商品によってグループ化された数量の合計です)。しかし、2番目のパターンはそのパターンと一致しません。 – TheF1rstPancake

+0

注文番号1のキャンディは4回、注文番号1のガムは2回注文されました。キャンディーはどこにも注文されていないので、キャンディーで注文された商品の生産量はキャンディー4とガム2です。 – connor

+0

私は今それを得ると思います。ガムのある3つの注文がありました。それらの注文のうち、7セットのガムが(3つの異なるオーダーで)合計で注文され、キャンディの4つとソーダの3つのものが注文された。 – TheF1rstPancake

答えて

0

それはあなたが何をしたいかのように聞こえるが、各要素間の関連を見つけることです。 2つ(またはそれ以上)の注文に「キャンディー」が含まれている場合、それぞれの商品の数は含まれています。

これは私が思いつくことができる最高です。まず、各製品ごとにグループ化し、その製品を持つすべての注文を検索します。次に、そのサブセットを元のデータフレームから取り出し、各製品の数量の合計を取得します。

# 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これらの注文のすべてを製品別にグループ化して、一致するすべての注文の各製品の数量の合計を取得します。

+0

ありがとうございます!これは完璧でとても役に立ちました。 – connor

+1

問題ありません。あなたが答えとしてこれを受け入れる気にならないなら、それは非常に高く評価されるでしょう! – TheF1rstPancake

関連する問題