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

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

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

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

pandas

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

Q&A

解決済

1回答

400閲覧

データフレーム内の条件で指定した2つのセルの合計値を出したい

karakarakarappo

総合スコア28

Python

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

pandas

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

0グッド

0クリップ

投稿2022/07/29 07:16

前提

データフレーム内の条件で指定した2つのセルの合計値を出したいです。

以下表のような計算を、pandasで行いたいです。

列番号ABC計算結果
10000
21231
32345
45679

列1の計算結果はA1
列2の計算結果はA2+C1
列3の計算結果はA3+C2
列4の計算結果はA4+C3
というようなイメージです。

なぜこれを実現しないといけないのか

なぜこのようなことを実現したいのかというと、
現在売上高を集計し、Matplotlibで描画をすることを想定した、
以下の条件のあるデータフレームを作成しているためです。

列1date当日売上仮売上高合計確定売上高合計
12022/7/1100100100
22022/7/2100200200
32022/7/3200400400
42022/7/4200600650
52022/7/50600650
62022/7/6300900950
72022/7/710010001250
82022/7/8010001250

列「当日売上」というのは、各担当から申告があった数値を反映しており、
列「仮売上高合計」はその当日売上をcumsumで集計しています。

ランダムな日にちで、確定した売上高合計の情報が入手できるため、
それまでの集計を無視して、「確定売上高合計」に正しい数値が入ります。

その後、毎日の売上を、「確定売上高合計」の前日に足した情報を準備する必要があります。

色々ツッコみたい気持ちもありますが、これを実現するために、
エクセルのようにセル指定して計算する、C1+A2みたいなことをデータフレーム内で実現したいのです。。。

検討していること

df.shift(period=1)で式を組んで列を追加して、加算計算を組めばいいか?と考えているのですが、
他にスマートな書き方があればと思い、ご相談させていただきました。

以下にテーブルデータを添付しますので、ご利用ください。

テストデータ

python

1s = """ 2列1,date当日売上,仮売上高合計,確定売上高合計 31,2022/7/1,100,100,100 42,2022/7/2,100,200,200 53,2022/7/3,200,400,400 64,2022/7/4,200,600,650 75,2022/7/5,0,600,650 86,2022/7/6,300,900,950 97,2022/7/7,100,1000,1250 108,2022/7/8,0,1000,1250 11""" 12df = pd.read_csv(StringIO(s), dtype={'trade_date':str})

お忙しいところ恐れ入りますが、ご知見のある方、ご協力いただければ幸いです。
よろしくお願い致します。

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

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

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

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

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

can110

2022/07/29 08:04

提示された2つの表の列の対応関係ですが、A=当日売上, C=確定売上高合計でしょうか? であれば1つ目の表の「計算結果」に対応する列を2つ目の表の右端に追記すると、具体的に欲しい結果が第三者にも理解しやすくなるかと思います。
karakarakarappo

2022/07/29 15:33

can110さん コメントありがとうございます。 おっしゃる通りです。的確なアドバイスありがとうございます。 ぜひご意見を取り入れさせていただきたいのですが、追加で躓いた部分が発生しました。 よろしければ、以下の質問も確認頂き、何かしらのアドバイスを頂けたら幸いです。 https://teratail.com/questions/jz5kte09uzj9dl よろしくお願い致します。
guest

回答1

0

ベストアンサー

python

1import pandas as pd 2import io 3 4csv_data = ''' 5列番号,A,B,C 61,0,0,0 72,1,2,3 83,2,3,4 94,5,6,7 10''' 11df = pd.read_csv(io.StringIO(csv_data)) 12 13# 14df['計算結果'] = df['A'] + df['C'].shift(fill_value=0) 15print(df)
列番号ABC計算結果
10000
21231
32345
45679

投稿2022/07/29 07:57

編集2022/07/29 08:14
melian

総合スコア19714

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

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

karakarakarappo

2022/07/29 15:35

melianさん コメントありがとうございます。 やはり今回の場合はdf.shiftが適切ということですね、ありがとうございます。 ベストアンサーにさせていただきます。 恐れ入りますが、抱えている問題が少々異なっており、追加で質問を投下させていただきました。 よろしければ、以下の質問も確認頂き、何かしらのアドバイスを頂けたら幸いです。 https://teratail.com/questions/jz5kte09uzj9dl よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問