質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

711閲覧

python 商品の組み合わせ 売上総額集計

kobakenn3

総合スコア3

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2022/03/16 01:58

編集2022/03/16 03:27

どなたか助けてください。pythonに関する質問です。

〇前提
当店では、お客様に商品を2つ選択してもらい、販売する形式をとっています。
売上のデータからどの組み合わせが最も売り上げをあげているかを把握したいです。

〇用いるデータ(例)
csv_data = '''
No,商品A,商品B,時刻,支払額
0,みかん,りんご,2022/3/15 10:00,-300
1,りんご,桃,2022/3/15 12:00,-500
2,ぶどう,みかん,2022/3/15 14:00,-400
3,みかん,レモン,2022/3/15 15:00,-600
4,りんご,みかん,2022/3/15 16:00,-200
5,みかん,りんご,2022/3/15 17:00,-180
6,みかん,レモン,2022/3/15 15:10,-290
7,レモン,みかん,2022/3/15 15:20,-420
'''

〇実現したいこと
読み込んだcsvデータの支払額がお客様がその時支払った金額になるので、
以下のような形で集計したい。*商品AとBを入れ替えた組み合わせ(例えば みかん&りんご と りんご&みかん)は同じ組み合わせとみなしてカウントする。

組み合わせ,売れた数,売上金額
みかん&りんご,30,9000
りんご&桃,20,8800
ぶどう&みかん,40,7000

〇課題
・当店では単価が決まっておらず、各組み合わせに応じて料金が決まっているため、
単純に商品Aの金額と商品Bの金額を合計できない
・価格変動制のため、例えばりんご&みかんを300円で販売するときもあれば320円である場合もあるため、csvの”支払額”のカラムに基づいた金額で集計したい
・現状読み込むcsvデータの”支払額”はobject型になっているので、合算可能な形にまずは変換する必要がある想定
です。

〇試したこと
df["支払額"] = pd.to_numeric(df["支払額"])
dfx = df.groupby(df[["商品A","商品B"]].agg(frozenset,1))["No"].sum().to_frame("支払額")
dfx.sort_values(by="支払額",ascending=False).head(10)

でやってみましたが、想定した金額よりも大きな値となってしまい、困っています。

〇当サイトで売れた数の集計方法は教えていただいたのですが、同時に売上金額の集計も
実現したく質問させていただきます。

python初心者のため、初歩的な質問で申し訳ございませんが、よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2022/03/16 02:03

>初歩的な質問で申し訳ございません 質問ではなくて作業依頼では。 https://teratail.com/help/avoid-asking コードをください・デバッグしてください等の丸投げの質問 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。
kobakenn3

2022/03/16 02:58

質問の仕方がよくなかったですね、申し訳ございません。 具体的には、 df["支払額"] = pd.to_numeric(df["支払額"]) dfx = df.groupby(df[["商品A","商品B"]].agg(frozenset,1))["No"].sum().to_frame("支払額") dfx.sort_values(by="支払額",ascending=False).head(10) で実行してみたのですが、集計した金額があまりにも大きな値になってしまったため、 質問させていただいた次第です。
AbeTakashi

2022/03/16 03:08

↑この情報は質問文に含めるべきかと思います。1T2R3M4さんも書かれていますが、自分でどこまでやってどこが分からないのか?というのは質問する際には必須の情報です。それが質問文内にないため「作業依頼」というふうに受け取られてしまいます。質問文は追記や更新ができます。
kobakenn3

2022/03/16 03:28

ご指摘ありがとうございます。更新させていただきました。
guest

回答1

0

ベストアンサー

python

1import pandas as pd 2import io 3 4pd.set_option('display.unicode.east_asian_width', True) 5 6csv_data = ''' 7No,商品A,商品B,時刻,支払額 80,みかん,りんご,2022/3/15 10:00,-300 91,りんご,桃,2022/3/15 12:00,-500 102,ぶどう,みかん,2022/3/15 14:00,-400 113,みかん,レモン,2022/3/15 15:00,-600 124,りんご,みかん,2022/3/15 16:00,-200 135,みかん,りんご,2022/3/15 17:00,-180 146,みかん,レモン,2022/3/15 15:10,-290 157,レモン,みかん,2022/3/15 15:20,-420 16''' 17df = pd.read_csv(io.StringIO(csv_data), parse_dates=['時刻']) 18 19# 20df['組み合わせ'] = df[['商品A', '商品B']].agg(frozenset,1) 21dfx = ( 22 df.groupby('組み合わせ', as_index=False) 23 .agg( 24 組み合わせ = ('組み合わせ', lambda x: '&'.join(x.values[0])), 25 売れた数 = ('No', 'count'), 26 支払額 = ('支払額', lambda x: -x.sum())) 27 .sort_values('支払額', ascending=False) 28 .reset_index(drop=True)) 29 30print(dfx) 31 32# 33 組み合わせ 売れた数 支払額 340 みかん&レモン 3 1310 351 みかん&りんご 3 680 362 桃&りんご 1 500 373 みかん&ぶどう 1 400

投稿2022/03/16 03:32

編集2022/03/16 04:58
melian

総合スコア19805

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問