日付順に記載している顧客管理データ(売上も計上している)から各営業さんごとに集計
したくpythonを勉強しております。
流れといたしましては、
➀売り上げを計上しているエクセルから各営業担当さんごとに売り上げを集計したい
↓
➁各営業担当さんごとの集計を歩合率を計算するためのエクセルシートに歩合率毎に振り分けて記載した
↓
➂上記➁で計算したものを給与明細のテンプレートに記載したい
上記がやりたいこととなります。
毎回の手動での記入をなくしたく奮闘致しております。
まだ、➀の段階でつまずいております。
下記にコード、エラー等を記載いたしますので、何卒宜しくお願い致します。
なお添付写真は、自分で作成したダミーの顧客管理データとうです。
###自作の顧客管理シートです
###エクセルからコピー致しました。行などがかなりずれてしまって見づらくて申し訳ありません。
顧客名がa1,a2... です。
顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0% 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0% 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0% 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0% 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0% 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0% 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0% 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0% 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0% 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
###上記を保管しているファイル名は「新・給与関係」という名前で、ファイル内は以下のようになっております。split_file というのが担当者枚に分けるコード(教えて頂いた)です。
###上記質問に対し2パターンのご回答を頂きました。自分で実行するとどうしてもエラーが出てしまし、何が原因なのか分かりません。基本的な質問で誠に申し訳ありませんが何卒よろしくお願いいたします。
###各営業担当毎にデータを集計する為のコードです(2パターン教えて頂きました。)
お教えいただいたコード➀
import openpyxl as excel, json in_file = 'matome.xlsx' out_file = 'matome.json' def split_list(): users = read_and_split(in_file) result = {} for name, rows in users.items(): result[name] = calc_user(rows) print(name, result[name]['total']) with open(out_file, "wt") as fp: json.dump(result, fp) def read_and_split(in_file): users = {} sheet = excel.load_workbook(in_file).active for i, row in enumerate(sheet.iter_rows()): #5行目からデータを読み取る if i<4: continue values = [col.value for col in row] name = values[1] if name not in users: users[name] = [] users[name].append(values) return users def calc_user(rows): total = 0 items = [] for row in rows: space,usercode, date, username, name, appointer,zipno, item, kouji, mobile, nazo, mail, cnt, price, per, bikou = row date_s = date.strftime('%m/%d') items.append([date_s, name, item, cnt, price, per]) total += (cnt or 0) * (price or 0) return {'items':items, 'total': total} if __name__ == "__main__": split_list()
###➀の実行後のエラーです。
2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 Traceback (most recent call last): File "C:/Users/hannchou6/Desktop/新・給与関係/salesman.py", line 43, in <module> split_list() File "C:/Users/hannchou6/Desktop/新・給与関係/salesman.py", line 11, in split_list result[name] = calc_user(rows) File "C:/Users/hannchou6/Desktop/新・給与関係/salesman.py", line 36, in calc_user date_s = date.strftime('%m/%d') AttributeError: 'NoneType' object has no attribute 'strftime'
###各営業担当毎にデータを集計する為のコードです。
教えて頂いたコード➁
import pandas as pd in_file = 'matome.xlsx' df = pd.read_excel(in_file) print(df) print(df.groupby('担当者名2(アポインター)').sum()['金額'])
###➁の実行後のエラーです。
Empty DataFrame Columns: [] Index: [] Traceback (most recent call last): File "C:\Users\hannchou6\Desktop\新・給与関係\split_list.py", line 7, in <module> print(df.groupby('担当者名2(アポインター)').sum()['金額']) File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 6717, in groupby return DataFrameGroupBy( File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py", line 560, in __init__ grouper, exclusions, obj = get_grouper( File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\grouper.py", line 811, in get_grouper raise KeyError(gpr) KeyError: '担当者名2(アポインター)'
回答3件
あなたの回答
tips
プレビュー