上記の様に登録されたデータの"合計売上"に"Aシェア"、"Bシェア"を下記のデータに按分したいと考えております。
按分イメージは下記です
こちらを実現するpythonコード例をご教示頂きますと幸いです。
(施設毎に、割る数字が変化するのでそれをどのように実現するのかをお聞きしたいです)
宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
手順
施設毎に、割る数字が変化するのでそれをどのように実現するのかをお聞きしたいです
-
- DataFrame.merge() で2つの DataFrame を "施設コード" でマージする。
施設コード | 営業コード | 合計売上 | Aシェア | Bシェア |
---|---|---|---|---|
1001 | 2091 | 400 | 0.4 | 0.1 |
1001 | 3093 | 400 | 0.4 | 0.1 |
1001 | 6095 | 400 | 0.4 | 0.1 |
1001 | 2093 | 400 | 0.4 | 0.1 |
1002 | 2092 | 500 | 0.2 | 0.2 |
1002 | 5405 | 500 | 0.2 | 0.2 |
1002 | 4302 | 500 | 0.2 | 0.2 |
1002 | 4309 | 500 | 0.2 | 0.2 |
1002 | 4322 | 500 | 0.2 | 0.2 |
1003 | 5498 | 1000 | 0.3 | 0.5 |
1003 | 4392 | 1000 | 0.3 | 0.5 |
1004 | 3942 | 600 | 0.4 | 0.4 |
1005 | 3984 | 400 | 0.3 | 0.4 |
-
- DataFrame.groupby() で "施設コード" で集計する。
-
- GroupBy.apply() で各グループごとに "合計売上", "Aシェア", "Bシェア" の列をそのグループの数で除算する関数を作り、指定する。
コード
python
1import pandas as pd 2 3codes = pd.read_csv("codes.csv") 4sales = pd.read_csv("sales.csv") 5 6# "施設コード" で結合する。 7merged = codes.merge(sales, left_on="施設コード", right_on="施設コード", how="outer") 8 9def func(g): 10 cols = ["合計売上", "Aシェア", "Bシェア"] # 営業コード数で除算する列 11 g[cols] = g[cols].div(len(g.index)) 12 return g 13 14ret = merged.groupby("施設コード").apply(func) 15ret.to_csv("output.csv")
入出力
入力ファイル
営業コードが記載された CSV (codes.csv)
csv
1施設コード,営業コード 21001,2091 31001,3093 41001,6095 51001,2093 61002,2092 71002,5405 81002,4302 91002,4309 101002,4322 111003,5498 121003,4392 131004,3942 141005,3984
売上が記載された CSV (sales.csv)
csv
1施設コード,合計売上,Aシェア,Bシェア 21001,400,0.4,0.1 31002,500,0.2,0.2 41003,1000,0.3,0.5 51004,600,0.4,0.4 61005,400,0.3,0.4
出力 CSV (output.csv)
施設コード,営業コード,合計売上,Aシェア,Bシェア 1001,2091,100.0,0.1,0.025 1001,3093,100.0,0.1,0.025 1001,6095,100.0,0.1,0.025 1001,2093,100.0,0.1,0.025 1002,2092,100.0,0.04,0.04 1002,5405,100.0,0.04,0.04 1002,4302,100.0,0.04,0.04 1002,4309,100.0,0.04,0.04 1002,4322,100.0,0.04,0.04 1003,5498,500.0,0.15,0.25 1003,4392,500.0,0.15,0.25 1004,3942,600.0,0.4,0.4 1005,3984,400.0,0.3,0.4
投稿2019/06/12 10:53
編集2019/06/12 10:55総合スコア21956
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/13 03:26