実現したいこと
データフレーム内の条件で指定した2つのセルの合計値を出したいです。
以下に記載しております、表①から表②のように、「計算結果」を、データフレーム内で計算をしたいです。
表①
A | B | C |
---|---|---|
1 | 1 | 0 |
2 | 3 | 0 |
3 | 6 | 7 |
4 | 10 | 0 |
5 | 15 | 0 |
6 | 21 | 0 |
7 | 28 | 0 |
8 | 36 | 0 |
9 | 45 | 55 |
10 | 55 | 0 |
11 | 66 | 0 |
12 | 78 | 0 |
⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
表②
A | B | C | 計算結果 |
---|---|---|---|
1 | 1 | 0 | 1 |
2 | 3 | 0 | 3 |
3 | 6 | 7 | 7 |
4 | 10 | 0 | 11 |
5 | 15 | 0 | 16 |
6 | 21 | 0 | 22 |
7 | 28 | 0 | 29 |
8 | 36 | 0 | 37 |
9 | 45 | 55 | 55 |
10 | 55 | 0 | 65 |
11 | 66 | 0 | 76 |
12 | 78 | 0 | 88 |
エクセルの計算式で書くとすると、「=if(C3>0,C3,D2+A3)」という感じになると思います。
なぜこれを実現しないといけないのか
現在売上高を集計し、Matplotlibで描画をすることを想定した、
以下の条件のあるデータフレームを作成しているためです。
date | 当日売上 | 仮売上高合計 | 確定売上高合計 | 暫定売上高合計(集計部分) |
---|---|---|---|---|
2022/7/1 | 100 | 100 | 0 | 100 |
2022/7/2 | 100 | 200 | 0 | 200 |
2022/7/3 | 200 | 400 | 600 | 600 |
2022/7/4 | 200 | 600 | 0 | 800 |
2022/7/5 | 0 | 600 | 0 | 800 |
2022/7/6 | 300 | 900 | 0 | 1100 |
2022/7/7 | 100 | 1000 | 1000 | 1000 |
2022/7/8 | 300 | 1000 | 0 | 1300 |
列「当日売上」というのは、各担当から申告があった数値毎日反映し、
列「仮売上高合計」はその当日売上をcumsumで集計しています。
確定売上高合計は、ランダムな日にちで、確定した売上高合計の情報が入手でき、
それまでの集計を無視して、「確定売上高合計」と「暫定売上高合計(集計部分)」に正しい数値が入ります。
エクセルで集計すればいいじゃんと思われる方もいらっしゃると思うのですが、
なんとかpythonでコード化したいと考えています。
検討したこと、試したこと
以下エラーコードの部分にて、lamda関数で組んでみたのですが、
lamadaで計算をする前に列が存在しないため、そもそも集計できないといったエラーになってしまいます。
最初から空の列を追加しておいても、参照するのは空の値になるので、問題解決にはなりませんでした。。。
以下にテーブルデータを添付しますので、ご利用ください。
python
1import pandas as pd 2import io 3 4csv_data = ''' 5A,B,C 61,1,0 72,3,0 83,6,7 94,10,0 105,15,0 116,21,0 127,28,0 138,36,0 149,45,55 1510,55,0 16 17''' 18df = pd.read_csv(io.StringIO(csv_data))
Error内容
python
1 2df['計算結果'] = df.apply(lambda x: x['C'] 3 if x['C'] != 0 4 else (x['A'] + x['計算結果'].shift(fill_value=0)) , 5 axis=1) 6 7(df) 8 9KeyError: '計算結果' 10 11
お忙しいところ恐れ入りますが、ご知見のある方、ご協力いただければ幸いです。
以上、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/31 04:42