teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2021/10/02 11:49

投稿

bsdfan
bsdfan

スコア4921

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  あとは、それを使って前期比を計算すればいいです。
5
5
 
6
- 2年前の計算も、同じように-2した列マージすればできるはずです。
6
+ 2年前の計算も、同じように-2した列マージすればできるはずです。
7
7
 
8
8
  ```python
9
9
  import pandas as pd

1

プログラム変更

2021/10/02 11:48

投稿

bsdfan
bsdfan

スコア4921

answer CHANGED
@@ -1,9 +1,9 @@
1
- 決算期の1年前を表すを作って(下記の例では_prevという列をlambdaで作ってassignしています)
1
+ 決算期を表す数値列と、そこから1をマイナスした列(1年前を表す)を作って、
2
- その列と元の決算期の列をキーに、自身をマージすると、1年前の売上高を同じ行に持って来れます。
2
+ れらの列をキーに、自身をマージすると、1年前の売上高を同じ行に持って来れます。
3
3
 
4
4
  あとは、それを使って前期比を計算すればいいです。
5
5
 
6
- 2年前の計算も、同じように2年前を表すを作って計算すればできるはずです。
6
+ 2年前の計算も、同じように-2したとマージすればできるはずです。
7
7
 
8
8
  ```python
9
9
  import pandas as pd
@@ -15,11 +15,15 @@
15
15
  # 対象の証券コードの行と、必要な列だけを抜き出す
16
16
  df2 = df.loc[df['証券コード'].isin(shou_cd), ['証券コード', '企業名', '決算期', '決算期間', '売上高']]
17
17
 
18
+ # 決算期の数値化と1年前を表す列の追加
19
+ df2['Y'] = df2['決算期'].str[:-2].astype(int)
20
+ df2['Y_prev'] = df2['Y'] - 1
21
+
22
+ # 自身をmerge
18
- df3 = pd.merge(
23
+ df3 = df2.merge(
19
- df2.assign(_prev=df['決算期'].map(lambda s: f'{int(s[:-2]) - 1}年度')),
20
24
  df2,
21
- left_on=['証券コード', '企業名', '_prev', '決算期間'],
25
+ left_on=['証券コード', '企業名', 'Y_prev', '決算期間'],
22
- right_on=['証券コード', '企業名', '決算期', '決算期間'],
26
+ right_on=['証券コード', '企業名', 'Y', '決算期間'],
23
27
  suffixes=(None, '_prev'),
24
28
  how='left')
25
29