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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

Q&A

解決済

1回答

9598閲覧

Pandasでsumifsのような集計(複数条件での集計)をしたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

0グッド

0クリップ

投稿2019/04/29 05:58

下記のように、工事一覧と支払一覧の表があります。

工事一覧

codeは工事番号、nameは工事名、complete_dateは完成日です。

codenamecomplete_date
1A2018/10/2
2B2018/11/2
3C2018/12/4
支払一覧

dateは支払日、codeは工事番号、amountは支払金額、month_endは支払日が属する月の末日

datecodeamountmonth_end
2018/10/1014000002018/10/31
2018/10/1023000002018/10/31
2018/10/1035000002018/10/31
2018/11/10110000002018/11/30
2018/11/10230000002018/11/30
2018/11/10320000002018/11/30
2018/12/10120000002018/12/31
2018/12/10230000002018/12/31
2018/12/1031000002018/12/31
2019/1/10102019/1/31
2019/1/1024000002019/1/31
2019/1/1036000002019/1/31

最終的に、下記のように、工事毎、支払毎の集計をしたいです。

番号リスト工事毎、支払毎の集計
code2018/10/312018/11/302018/12/312019/1/31
14000001000002000000
230000030000003000000400000
35000002000000100000600000

python

1mport pandas as pd 2# 工事一覧のデータフレーム 3site_list_df = pd.DataFrame([ 4 [1, 'A', '2018-10-2'], 5 [2, 'B', '2018-11-2'], 6 [3, 'C', '2018-12-2'] 7], columns=['code', 'name', 'complete_date']) 8site_list_df['complete_date'] = pd.to_datetime(site_list_df['complete_date']) 9# 支払い情報のデータフレーム 10cost_list_df = pd.DataFrame([ 11 ['2018/10/10', 1, 400000, '2018/10/31'], 12 ['2018/10/10', 2, 300000, '2018/10/31'], 13 ['2018/10/10', 3, 500000, '2018/10/31'], 14 ['2018/11/10', 1, 1000000, '2018/11/30'], 15 ['2018/11/10', 2, 3000000, '2018/11/30'], 16 ['2018/11/10', 3, 2000000, '2018/11/30'], 17 ['2018/12/10', 1, 2000000, '2018/12/31'], 18 ['2018/12/10', 2, 3000000, '2018/12/31'], 19 ['2018/12/10', 3, 100000, '2018/12/31'], 20 ['2019/1/10', 2, 400000, '2019/1/31'], 21 ['2019/1/10', 3, 600000, '2019/1/31'], 22], columns=['cost_date', 'code', 'amount', 'month_end']) 23month_end_list = cost_list_df['month_end'].drop_duplicates()

上記の通り、コードを書いてみたのですが、どうしたらそのような集計ができるのか。分かりません。
エクセルであれば、sumifs関数を用いて、codeとmonth_endの条件で集計すれば良いかと思います。

未成工事支出金から、完成工事原価に振り替える会計処理をしたいと考えており、そのための集計をしたいと考えております。(工事完成までの間の支出は全て未成工事支出金に計上され、工事完成時に完成工事原価に振り替えます。工事完成後の支出はいったん未成工事支出金に計上され、月末に完成工事原価に振り替えます。)

お分かりの方、ご教示頂ければ幸いです。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

番号リスト工事毎、支払毎の集計

であれば、以下のようにピボットテーブルのみで実現できるかと思います。
参考:pandasのピボットテーブルでカテゴリ毎の統計量などを算出

Python

1import pandas as pd 2import numpy as np 3 4# 支払い情報のデータフレーム 5cost_list_df = pd.DataFrame([ 6 ['2018/10/10', 1, 400000, '2018/10/31'], 7 ['2018/10/10', 2, 300000, '2018/10/31'], 8 ['2018/10/10', 3, 500000, '2018/10/31'], 9 ['2018/11/10', 1,1000000, '2018/11/30'], 10 ['2018/11/10', 2,3000000, '2018/11/30'], 11 ['2018/11/10', 3,2000000, '2018/11/30'], 12 ['2018/12/10', 1,2000000, '2018/12/31'], 13 ['2018/12/10', 2,3000000, '2018/12/31'], 14 ['2018/12/10', 3, 100000, '2018/12/31'], 15 ['2019/1/10' , 2, 400000, '2019/1/31'], 16 ['2019/1/10' , 3, 600000, '2019/1/31'], 17], columns=['cost_date', 'code', 'amount', 'month_end']) 18 19df = pd.pivot_table(cost_list_df, index='code', columns='month_end', aggfunc=np.sum).fillna(0) 20print(df) 21""" 22 amount 23month_end 2018/10/31 2018/11/30 2018/12/31 2019/1/31 24code 251 400000.0 1000000.0 2000000.0 0.0 262 300000.0 3000000.0 3000000.0 400000.0 273 500000.0 2000000.0 100000.0 600000.0 28"""

投稿2019/04/29 07:11

can110

総合スコア38262

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問