はじめまして。python pandas でdate_time型のシリーズから1月1日から順に、12月末日までの一年間のデータを抽出する方法を考えています。
自分なりに書いてみたコードが以下です。機能はするのですが、内容が複雑に見えます(特にorのところなど)。
色々方法はあると思うのですが、皆様ならどのような関数やメソッドを使いますか? ヒントだけでもいいので、アドバイスをいただければ幸いです。よろしくお願いします。
DFのイメージ
|エントリー |数量|損益|
|2021.01.06|0.1|300|
|2021.01.06|0.1|200|
|2021.01.12|0.2|-100|
|2021.01.13|0.1|100|
|2021.02.03|0.1|1000|
|2021.03.14|0.2|-1000|
コード↓
d0 = 1 m0 = 1 while True: if m0 > 12: break d1 = d0 + 1 m1 = m0 + 1 dt0 = dt.datetime(2021, m0, d0) if (m0 == 1 or m0 == 3 or m0 == 5 or m0 == 7 or m0 == 8 or m0 == 10 or m0 == 12) and d1 > 31: #30日の月の月末の処理 if m0 != 12: dt1 = dt.datetime(2021, m1, 1) #d1 = 32 を回避 else: dt1 = dt.datetime(2022, 1, 1) #m1 = 13 を回避 profit_day.append(df[(df['エントリー'] >= dt0) & (df['エントリー'] < dt1)]['損益'].sum()) #profit_day = [] に格納 d0 = 1 m0 += 1 elif (m0 == 4 or m0 == 6 or m0 == 9 or m0 == 11) and d1 >30: #31日の月の月末の処理 dt1 = dt.datetime(2021, m1, 1) #d1 = 31 を回避 profit_day.append(df[(df['エントリー'] >= dt0) & (df['エントリー'] < dt1)]['損益'].sum()) #profit_day = [] に格納 d0 = 1 m0 += 1 elif m0 == 2 and d1 > 28: #28日の月の月末の処理 dt1 = dt.datetime(2021, m1, 1) #d1 = 29 を回避 profit_day.append(df[(df['エントリー'] >= dt0) & (df['エントリー'] < dt1)]['損益'].sum()) #profit_day = [] に格納 d0 = 1 m0 += 1 else: #月末以外の処理 dt1 = dt.datetime(2021, m0, d1) profit_day.append(df[(df['エントリー'] >= dt0) & (df['エントリー'] < dt1)]['損益'].sum()) #profit_day = [] に格納 d0 += 1 profit_day = pd.Series([i for i in profit_day if i != 0]) #損益が0の日を除外
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/19 10:08