工事毎の支払いを取りまとめたいと考えています。
エクセルで言う所の、sumif集計がしたいです。
工事の一覧は、下記の通りです。工事番号がcode、工事名がnameです。
code | name |
---|---|
1001 | A工事 |
1002 | B工事 |
1003 | C工事 |
支払いの一覧は、下記の通りです。工事番号がcode、支払金額がammountです。
date | code | ammount |
---|---|---|
2019/4/1 | 1001 | 6,000 |
2019/4/2 | 1002 | 3,000 |
2019/4/3 | 1003 | 4,000 |
2019/4/4 | 1001 | 1,000 |
最終的に、下記のようにデータを取りまとめたいです。
code | name | ammount |
---|---|---|
1001 | A工事 | 7,000 |
1002 | B工事 | 3,000 |
1003 | C工事 | 4,000 |
実際に記述したコードは、下記の通りです。
python
1import pandas as pd 2# 工事一覧のデータフレーム 3site_df = pd.DataFrame([[1001, 'A工事'], [1002, 'B工事'], [1003, 'C工事']], columns=['code', 'name']) 4 5# 支払一覧のデータフレーム 6payment_df = pd.DataFrame([['2019/4/1', 1001, 1000], ['2019/4/2', 1002, 3000], ['2019/4/3', 1003, 4000], ['2019.4.4', 1001, 1000]], columns=['date', 'code', 'ammount']) 7 8# 集計 9site_df['ammount'] = payment_df[payment_df['code']==site_df['code']]['ammount'].sum() 10 11# 表示 12site_df
しかし、実際には、下記のエラーが出ます。
ValueError Traceback (most recent call last)
<ipython-input-71-f6c0a026d5f4> in <module>
7
8 # 集計
----> 9 site_df['ammount'] = payment_df[payment_df['code']==site_df['code']]['ammount'].sum()
10
11 # 表示
~\Anaconda3\lib\site-packages\pandas\core\ops.py in wrapper(self, other, axis)
1674
1675 elif isinstance(other, ABCSeries) and not self._indexed_same(other):
-> 1676 raise ValueError("Can only compare identically-labeled "
1677 "Series objects")
1678
ValueError: Can only compare identically-labeled Series objects
どうすれば良いか、お分かりの方は見えますでしょうか。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/04/24 00:30