質問編集履歴
3
パスを消しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -122,82 +122,48 @@
|
|
122
122
|
|
123
123
|
|
124
124
|
|
125
|
-
df_only_current = df.
|
125
|
+
df_only_current = df.groupby('証券コード').max('年度')
|
126
|
+
|
126
|
-
|
127
|
+
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
128
|
+
|
129
|
+
|
130
|
+
|
127
|
-
|
131
|
+
#追加する列名一覧
|
128
|
-
|
132
|
+
|
129
|
-
|
133
|
+
add_columns = ['純資産額','売上高','当期純利益','営業CF','EPS']
|
130
|
-
|
131
|
-
|
134
|
+
|
132
|
-
|
135
|
+
|
136
|
+
|
133
|
-
|
137
|
+
for column in add_columns:
|
134
|
-
|
135
|
-
|
136
|
-
|
138
|
+
|
137
|
-
|
139
|
+
for i in range(0,4):
|
140
|
+
|
138
|
-
|
141
|
+
j = i+1
|
142
|
+
|
139
|
-
|
143
|
+
df_pvt=df.pivot(index='証券コード',columns='n年前',values=column)
|
140
|
-
|
144
|
+
|
141
|
-
con
|
145
|
+
df_only_current[f"{column}_{i}→{j}"] = (df_pvt[i]-df_pvt[j])/df_pvt[j]
|
146
|
+
|
142
|
-
|
147
|
+
return df_only_current
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
148
|
+
|
149
|
+
|
150
|
+
|
149
|
-
def m
|
151
|
+
def file_merge(df_edinet):
|
152
|
+
|
150
|
-
|
153
|
+
columns =['日付','証券コード','区分','銘柄名','始値','高値','安値','終値','取引市場']
|
154
|
+
|
151
|
-
df = pd.read_csv('
|
155
|
+
df_stockprice = pd.read_csv('\stock_price.csv',names=columns,encoding="cp932")
|
156
|
+
|
152
|
-
|
157
|
+
print(df_edinet)
|
158
|
+
|
159
|
+
print(df_stockprice)
|
160
|
+
|
153
|
-
d
|
161
|
+
join_data = pd.concat([df_edinet,df_stockprice],join='証券コード')
|
154
162
|
|
155
163
|
|
156
164
|
|
157
|
-
df_only_current = df.groupby('証券コード').max('年度')
|
158
|
-
|
159
|
-
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
#追加する列名一覧
|
164
|
-
|
165
|
-
add_columns = ['純資産額','売上高','当期純利益','営業CF','EPS']
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
for column in add_columns:
|
170
|
-
|
171
|
-
for i in range(0,4):
|
172
|
-
|
173
|
-
j = i+1
|
174
|
-
|
175
|
-
df_pvt=df.pivot(index='証券コード',columns='n年前',values=column)
|
176
|
-
|
177
|
-
df_only_current[f"{column}_{i}→{j}"] = (df_pvt[i]-df_pvt[j])/df_pvt[j]
|
178
|
-
|
179
|
-
return df_only_current
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
def file_merge(df_edinet):
|
184
|
-
|
185
|
-
columns =['日付','証券コード','区分','銘柄名','始値','高値','安値','終値','取引市場']
|
186
|
-
|
187
|
-
df_stockprice = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\stock_price.csv',names=columns,encoding="cp932")
|
188
|
-
|
189
|
-
print(df_edinet)
|
190
|
-
|
191
|
-
print(df_stockprice)
|
192
|
-
|
193
|
-
join_data = pd.merge(df_edinet,df_stockprice,on='証券コード',how='left')
|
194
|
-
|
195
|
-
|
196
|
-
|
197
165
|
print(join_data)
|
198
166
|
|
199
|
-
#join_data.to_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\test.csv',encoding='cp932',index=False)
|
200
|
-
|
201
167
|
|
202
168
|
|
203
169
|
def main():
|
@@ -216,70 +182,6 @@
|
|
216
182
|
|
217
183
|
main()
|
218
184
|
|
219
|
-
groupby('証券コード').max('年度')
|
220
|
-
|
221
|
-
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
#追加する列名一覧
|
226
|
-
|
227
|
-
add_columns = ['純資産額','売上高','当期純利益','営業CF','EPS']
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
for column in add_columns:
|
232
|
-
|
233
|
-
for i in range(0,4):
|
234
|
-
|
235
|
-
j = i+1
|
236
|
-
|
237
|
-
df_pvt=df.pivot(index='証券コード',columns='n年前',values=column)
|
238
|
-
|
239
|
-
df_only_current[f"{column}_{i}→{j}"] = (df_pvt[i]-df_pvt[j])/df_pvt[j]
|
240
|
-
|
241
|
-
return df_only_current
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
def file_merge(df_edinet):
|
246
|
-
|
247
|
-
columns =['日付','区分','証券コード','銘柄名','始値','高値','安値','終値','取引市場']
|
248
|
-
|
249
|
-
df_stockprice = pd.read_csv('\stock_price.csv',names=columns,encoding="cp932")
|
250
|
-
|
251
|
-
print(df_edinet)
|
252
|
-
|
253
|
-
print(df_stockprice)
|
254
|
-
|
255
|
-
join_data = pd.merge(df_edinet,df_stockprice,on='証券コード',how='left')
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
print(join_data)
|
260
|
-
|
261
|
-
join_data.to_csv('\test.csv',encoding='cp932',index=False)
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
def main():
|
266
|
-
|
267
|
-
df_edinet = make_indicator_multiple()
|
268
|
-
|
269
|
-
file_merge(df_edinet)
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
print("finish")
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
if __name__ == "__main__":
|
278
|
-
|
279
|
-
main()
|
280
|
-
|
281
|
-
|
282
|
-
|
283
185
|
```
|
284
186
|
|
285
187
|
|
2
自身で挑戦した経緯を追加しました。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
pivotしたdataframeとpivotしていないdataframeを結合したい。
|
test
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
<
|
1
|
+
<お知らせ>
|
2
|
-
|
2
|
+
|
3
|
-
|
3
|
+
少し前に自身でもう少し頑張ってみますとしていましたが、エラー②までいって行き詰りました。
|
4
|
-
|
4
|
+
|
5
|
-
|
5
|
+
どなたかご助言いただけますと大変助かります。
|
6
|
+
|
7
|
+
============================================
|
6
8
|
|
7
9
|
|
8
10
|
|
@@ -14,7 +16,13 @@
|
|
14
16
|
|
15
17
|
以下のような対象データ1のpivot後のデータと、対象データ2をmergeしたいのですがうまくいきません。
|
16
18
|
|
19
|
+
|
20
|
+
|
17
|
-
|
21
|
+
原因はpivotしていないデータの型と、pivotしたデータの型が違うためのようですが、解決策が浮かびません。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
pivotする前に結合してしまう方法があるとは思うのですが、少しきれいじゃないように思うので、可能であればpivot後に結合したいと考えています。
|
18
26
|
|
19
27
|
|
20
28
|
|
@@ -114,6 +122,38 @@
|
|
114
122
|
|
115
123
|
|
116
124
|
|
125
|
+
df_only_current = df.from math import nan
|
126
|
+
|
127
|
+
import os
|
128
|
+
|
129
|
+
import pandas as pd
|
130
|
+
|
131
|
+
import numpy as np
|
132
|
+
|
133
|
+
import const #const.py
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
const.FOLDER_CURRENT = os.path.dirname(os.path.abspath(__file__))
|
138
|
+
|
139
|
+
const.FOLDER_EDINET = os.path.join(const.FOLDER_CURRENT,'data')
|
140
|
+
|
141
|
+
const.FILE_EDINET_CSV = os.path.join(const.FOLDER_EDINET,'result/indicator_multiple.csv')
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
def make_indicator_multiple():
|
150
|
+
|
151
|
+
df = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\indicator_single.csv',dtype={'証券コード':str},encoding="cp932")
|
152
|
+
|
153
|
+
df["証券コード"] = df["証券コード"].str[0:4]
|
154
|
+
|
155
|
+
|
156
|
+
|
117
157
|
df_only_current = df.groupby('証券コード').max('年度')
|
118
158
|
|
119
159
|
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
@@ -142,6 +182,68 @@
|
|
142
182
|
|
143
183
|
def file_merge(df_edinet):
|
144
184
|
|
185
|
+
columns =['日付','証券コード','区分','銘柄名','始値','高値','安値','終値','取引市場']
|
186
|
+
|
187
|
+
df_stockprice = pd.read_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\stock_price.csv',names=columns,encoding="cp932")
|
188
|
+
|
189
|
+
print(df_edinet)
|
190
|
+
|
191
|
+
print(df_stockprice)
|
192
|
+
|
193
|
+
join_data = pd.merge(df_edinet,df_stockprice,on='証券コード',how='left')
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
print(join_data)
|
198
|
+
|
199
|
+
#join_data.to_csv('C:\xampp\htdocs\01_AppDev\01_StockManagementApp\data\result\test.csv',encoding='cp932',index=False)
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
def main():
|
204
|
+
|
205
|
+
df_edinet = make_indicator_multiple()
|
206
|
+
|
207
|
+
file_merge(df_edinet)
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
print("finish")
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
if __name__ == "__main__":
|
216
|
+
|
217
|
+
main()
|
218
|
+
|
219
|
+
groupby('証券コード').max('年度')
|
220
|
+
|
221
|
+
df['n年前'] = df.groupby('証券コード')['年度'].transform('max')-df['年度']
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
#追加する列名一覧
|
226
|
+
|
227
|
+
add_columns = ['純資産額','売上高','当期純利益','営業CF','EPS']
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
for column in add_columns:
|
232
|
+
|
233
|
+
for i in range(0,4):
|
234
|
+
|
235
|
+
j = i+1
|
236
|
+
|
237
|
+
df_pvt=df.pivot(index='証券コード',columns='n年前',values=column)
|
238
|
+
|
239
|
+
df_only_current[f"{column}_{i}→{j}"] = (df_pvt[i]-df_pvt[j])/df_pvt[j]
|
240
|
+
|
241
|
+
return df_only_current
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
def file_merge(df_edinet):
|
246
|
+
|
145
247
|
columns =['日付','区分','証券コード','銘柄名','始値','高値','安値','終値','取引市場']
|
146
248
|
|
147
249
|
df_stockprice = pd.read_csv('\stock_price.csv',names=columns,encoding="cp932")
|
@@ -182,62 +284,38 @@
|
|
182
284
|
|
183
285
|
|
184
286
|
|
185
|
-
#得られ
|
287
|
+
#得られたエラーメッセージ
|
186
|
-
|
187
|
-
|
288
|
+
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
BPS EPS EPS_調整後 自己資本比率 ROE PER 従業員数 発行済株式総数 ... 営業CF_0→1 営業CF_1→2 営業CF_2→3 営業CF_3→4 EPS_0→1 EPS_1→2 EPS_2→3 EPS_3→4
|
192
|
-
|
193
|
-
証券コード ...
|
194
|
-
|
195
|
-
7516 4104.73 561.27 561.11 0.357 0.145 12.2 4037 34682113 ... 0.315924 0.283543 0.066304 -0.135211 0.635354 0.090282 0.082087 0.660540
|
196
|
-
|
197
|
-
9702 1309.81 124.04 NaN 0.712 0.129 26.4 1717 5669000 ... 0.382676 0.165805 2.979031 -0.159800 -0.241374 0.158062 0.777464 0.757364
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
[2 rows x 88 columns]
|
202
|
-
|
203
|
-
日付 区分 証券コード 銘柄名 始値 高値 安値 終値 取引市場
|
204
|
-
|
205
|
-
2021/10/8 1001 11 1001 日経225 28031.0 28321.0 28018.0 28049.0 1356770000 東証1部
|
206
|
-
|
207
|
-
2021/10/8 1002 11 1002 TOPIX 1964.0 1978.0 1961.0 1961.0 1356770000 東証1部
|
208
|
-
|
209
|
-
2021/10/8 1301 11 1301 極洋 3035.0 3035.0 2974.0 2998.0 22100 東証1部
|
210
|
-
|
211
|
-
2021/10/8 1305 11 1305 ダイワTPX 2069.0 2082.0 2063.0 2063.0 127680 東証1部
|
212
|
-
|
213
|
-
2021/10/8 1306 11 1306 TOPIX投 2046.0 2058.0 2039.0 2041.0 2852540 東証1部
|
214
|
-
|
215
|
-
... ... .. ... ... ... ... ... ... ...
|
216
|
-
|
217
|
-
2021/10/8 9993 11 9993 ヤマザワ 1730.0 1730.0 1712.0 1719.0 3700 東証1部
|
218
|
-
|
219
|
-
2021/10/8 9994 11 9994 やまや 2415.0 2421.0 2399.0 2415.0 5900 東証1部
|
220
|
-
|
221
|
-
2021/10/8 9995 11 9995 グローセル 409.0 409.0 404.0 406.0 39000 東証1部
|
222
|
-
|
223
|
-
2021/10/8 9996 91 9996 サトー商会 1502.0 1505.0 1500.0 1505.0 900 JAQ
|
224
|
-
|
225
|
-
2021/10/8 9997 11 9997 ベルーナ 827.0 835.0 824.0 824.0 152900 東証1部
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
[4358 rows x 9 columns]
|
230
|
-
|
231
|
-
|
289
|
+
ValueError: You are trying to merge on object and int64 columns. If you wish to proceed you should use pd.concat
|
232
|
-
|
290
|
+
|
291
|
+
|
292
|
+
|
233
|
-
|
293
|
+
#エラーを受けて試したコード①
|
234
|
-
|
235
|
-
|
294
|
+
|
236
|
-
|
237
|
-
1 9702 1309.81 124.04 NaN 0.712 0.129 26.4 1717 5669000 5199102000 ... 0.777464 0.757364 NaN NaN NaN NaN NaN NaN NaN NaN
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
295
|
+
mergeからconcatに変えてみる。
|
242
|
-
|
296
|
+
|
243
|
-
|
297
|
+
```Python
|
298
|
+
|
299
|
+
join_data = pd.concat(df_edinet,df_stockprice)
|
300
|
+
|
301
|
+
```
|
302
|
+
|
303
|
+
|
304
|
+
|
305
|
+
#試したコードのエラー①
|
306
|
+
|
307
|
+
TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"
|
308
|
+
|
309
|
+
|
310
|
+
|
311
|
+
#エラーを受けて試したコード②
|
312
|
+
|
313
|
+
```Python
|
314
|
+
|
315
|
+
join_data = pd.concat([df_edinet,df_stockprice],join='証券コード')
|
316
|
+
|
317
|
+
```
|
318
|
+
|
319
|
+
#試したコードのエラー②
|
320
|
+
|
321
|
+
Only can inner (intersect) or outer (union) join the other axis
|
1
元のコードに決定的な誤りがあったため
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
pivotしたdataframeとpivotしていないdataframeを結合したい。
|
1
|
+
【自身で再検証します。】pivotしたdataframeとpivotしていないdataframeを結合したい。
|
test
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
<追記お知らせ>
|
2
|
+
|
3
|
+
本件について、対象データ2の列名の順序が違ったことが発覚しました。
|
4
|
+
|
5
|
+
自身で再検証してまた躓いたら、再度ご助言を依頼します。
|
6
|
+
|
7
|
+
|
8
|
+
|
1
9
|
#実現したいこと。
|
2
10
|
|
3
11
|
Pythonでデータの整形を試みている中で、pivotしたdataframeとpivotしていないdataframeを結合(merge)したいです。
|