回答編集履歴

2

修正

2021/10/02 11:49

投稿

bsdfan
bsdfan

スコア4794

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 2年前の計算も、同じように-2した列マージすればできるはずです。
11
+ 2年前の計算も、同じように-2した列マージすればできるはずです。
12
12
 
13
13
 
14
14
 

1

プログラム変更

2021/10/02 11:48

投稿

bsdfan
bsdfan

スコア4794

test CHANGED
@@ -1,6 +1,6 @@
1
- 決算期の1年前を表すを作って(下記の例では_prevという列をlambdaで作ってassignしています)
1
+ 決算期を表す数値列と、そこから1をマイナスした列(1年前を表す)を作って、
2
2
 
3
- その列と元の決算期の列をキーに、自身をマージすると、1年前の売上高を同じ行に持って来れます。
3
+ れらの列をキーに、自身をマージすると、1年前の売上高を同じ行に持って来れます。
4
4
 
5
5
 
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 2年前の計算も、同じように2年前を表すを作って計算すればできるはずです。
11
+ 2年前の計算も、同じように-2したとマージすればできるはずです。
12
12
 
13
13
 
14
14
 
@@ -32,15 +32,23 @@
32
32
 
33
33
 
34
34
 
35
- df3 = pd.merge(
35
+ # 決算期の数値化と1年前を表す列の追加
36
36
 
37
- df2.assign(_prev=df['決算期'].map(lambda s: f'{int(s[:-2]) - 1}年度')),
37
+ df2['Y'] = df2['決算期'].str[:-2].astype(int)
38
+
39
+ df2['Y_prev'] = df2['Y'] - 1
40
+
41
+
42
+
43
+ # 自身をmerge
44
+
45
+ df3 = df2.merge(
38
46
 
39
47
  df2,
40
48
 
41
- left_on=['証券コード', '企業名', '_prev', '決算期間'],
49
+ left_on=['証券コード', '企業名', 'Y_prev', '決算期間'],
42
50
 
43
- right_on=['証券コード', '企業名', '決算期', '決算期間'],
51
+ right_on=['証券コード', '企業名', 'Y', '決算期間'],
44
52
 
45
53
  suffixes=(None, '_prev'),
46
54