質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

586閲覧

python コードの添削をお願い致します。

wadashotaro

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/19 09:32

はじめまして。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の日を除外

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

コードはほとんど読んでいませんが、良くあるのは以下のような集計です。出力イメージが違うのであれば、問題に追加してください。

python

1>>> print(df) 2 エントリー 数量 損益 30 2021.01.06 0.1 300 41 2021.01.06 0.1 200 52 2021.01.12 0.2 -100 63 2021.01.13 0.1 100 74 2021.02.03 0.1 1000 85 2021.03.14 0.2 -1000 9>>> print(df.groupby('エントリー')['損益'].sum().reset_index()) 10 エントリー 損益 110 2021.01.06 500 121 2021.01.12 -100 132 2021.01.13 100 143 2021.02.03 1000 154 2021.03.14 -1000

投稿2021/09/19 10:04

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wadashotaro

2021/09/19 10:08

ご回答ありがとうございます。長々と書いたコードが groupby でとても簡潔に処理できるのですね。目から鱗でした。 また一つ勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問