https://teratail.com/questions/223464
↑この投稿に関連した質問となります。
以下◆CSVのデータをPythonで、最新年の売り上げ高と任意のn年前のデータを使ってCAGRを計算したいと考えています。
先に示させていただいたURLにおいて、maxとminを使った計算方法が示されているところですが、
この抽出の仕方を、最新の年度と、n年前の年度の売上高を抽出する方法を教えてください。
参考に以下に自身の中途半端(頓挫した状態)のPythonコードを記載します。
このコードは、年度の並び替えをしてから、groupbyをして、そのあとgroup毎の一番上の値と、n番目の値を取り出そうと考えたものですが、【そのあと】以降の部分がわからなくなってしまった状態です。
また過去の投稿の回答のコードも掲載します。
◆CSV(この中には他の企業のデータも大量に含まれます。)
EDINET 証券コード 純資産額 総資産額 売上高 年度
E04846 97020 8755704000 13505695000 24434307000 2020
E04846 97020 6687528000 12243296000 22520258000 2019
E04846 97020 5556074000 7802415000 13395184000 2016
E04846 97020 5805187000 9195875000 16668195000 2017
E04846 97020 6185837000 9981400000 17441441000 2018
Python
1#私の中途半端なコードです。 2def make_indicator_multiple(): 3 indicator_list =[] 4 5 df = pd.read_csv(任意のパス,encoding="cp932") 6 df = df.sort_values("年度",ascending=False) 7 group = df.groupby("証券コード")
Python
1#過去質問の回答のコードです。 2import io 3import pandas as pd 4 5dummy_data = """ 6会社名,期末,売上高 7A,20190331,103 8A,20180331,102 9A,20170331,101 10B,20130331,15 11B,20110331,11 12B,20120331,12 13C,20150531,1000 14C,20140531,100 15C,20130531,10000 16C,20120531,10 17""" 18 19df = pd.read_csv(io.StringIO(dummy_data), parse_dates=["期末"]) 20group = df.groupby("会社名") 21min_idx = group["期末"].idxmin() 22max_idx = group["期末"].idxmax() 23min_data = df.iloc[min_idx].set_index("会社名") 24max_data = df.iloc[max_idx].set_index("会社名") 25ns = max_data["期末"].dt.year - min_data["期末"].dt.year 26result = (max_data["売上高"] / min_data["売上高"]) ** (1 / (ns - 1)) - 1 27print(result) 28""" => 29会社名 30A 0.019802 31B 0.363636 32C 9.000000 33dtype: float64 34"""
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/08 04:50