前提・実現したいこと
この表から括弧内の数値を分離して
例 16(1)の場合16をXXXの列、(1)をYYYの列に振り分け
日付 | AAA | BBB | CCC | 合計 |
---|---|---|---|---|
8月5日 | 16(1) | 36 | 3 | 55(1) |
8月6日 | 11 | 30(1) | 8 | 49(1) |
8月7日 | 28(1) | 33 | 13 | 74(1) |
8月8日 | 15 | 10 | 2 | 27 |
8月9日 | 5 | 0 | 0 | 5 |
8月10日 | 4 | 0 | 0 | 4 |
下記のような図を作成したいのですが
AAA | AAA | BBB | BBB | CCC | CCC | 合計 | 合計 | |
---|---|---|---|---|---|---|---|---|
日付 | XXX | YYY | XXX | YYY | XXX | YYY | XXX | YYY |
8月5日 | 16 | 1 | 36 | 0 | 3 | 0 | 55 | 1 |
8月6日 | 11 | 0 | 30 | 1 | 8 | 0 | 49 | 1 |
8月7日 | 28 | 1 | 33 | 0 | 13 | 0 | 74 | 1 |
8月8日 | 15 | 0 | 10 | 0 | 2 | 0 | 27 | 0 |
8月9日 | 5 | 0 | 0 | 0 | 0 | 0 | 5 | 0 |
8月10日 | 4 | 0 | 0 | 0 | 0 | 0 | 4 | 0 |
試したことのようにcolumnsを直接指定ではなく
データによりcolumnsが変わるため自動で設定したい
CCC-YYYのように0の場合の列追加方法を教えてください
よろしくお願いします
該当のソースコード
python
1import io 2import pandas as pd 3 4data = """\ 5日付,AAA,BBB,CCC,合計 68月5日,16(1),36,3,55(1) 78月6日,11,30(1),8,49(1) 88月7日,28(1),33,13,74(1) 98月8日,15,10,2,27 108月9日,5,0,0,5 118月10日,4,0,0,4 12""" 13df = pd.read_csv(io.StringIO(data), index_col=0) 14dfs = [items.astype(str).str.extractall("([0-9,]+)").unstack(fill_value=0) for label, items in df.iteritems()] 15 16df1 = pd.concat(dfs, axis=1) 17df1
試したこと
python
1arrays = [["AAA", "AAA", "BBB", "BBB", "CCC", "合計", "合計"], ["XXX", "YYY", "XXX", "YYY", "XXX", "XXX", "YYY"]] 2tuples = list(zip(*arrays)) 3df1.columns = pd.MultiIndex.from_tuples(tuples)
CCC-YYY列がない
AAA | AAA | BBB | BBB | CCC | 合計 | 合計 | |
---|---|---|---|---|---|---|---|
日付 | XXX | YYY | XXX | YYY | XXX | XXX | YYY |
8月10日 | 4 | 0 | 0 | 0 | 0 | 4 | 0 |
8月5日 | 16 | 1 | 36 | 0 | 3 | 55 | 1 |
8月6日 | 11 | 0 | 30 | 1 | 8 | 49 | 1 |
8月7日 | 28 | 1 | 33 | 0 | 13 | 74 | 1 |
8月8日 | 15 | 0 | 10 | 0 | 2 | 27 | 0 |
8月9日 | 5 | 0 | 0 | 0 | 0 | 5 | 0 |
補足情報(FW/ツールのバージョンなど)
Pandas1.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/12 02:03
2020/08/12 02:29
2020/08/12 02:50
2020/08/12 04:21