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

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

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

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

Q&A

1回答

572閲覧

python 順次抽出したデータフレームを一つのデーターフレームにまとめる方法を教えてください。

jimmyjimmy

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/05/02 09:04

前提・実現したいこと

python

for文を使って順次作ったデーターフレームを1つのデーターフレームにまとめていく方法を教えて頂けないでしょうか?

1列ごとの要素から予測したデータを集約したいのですが、うまく出来ず苦戦しております。

せいぜいprintで個々に表示させることはできたのですが、その後前に進めません。

宜しくお願い致します。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python

1 2import pandas as pd 3import datetime as dt 4#Prophet インストール 5!pip3 install pystan 6!pip3 install fbprophet 7from fbprophet import Prophet 8 9df_sample = pd.DataFrame({'ds': [42461,42462,42463,42464,42465], 10 'B': [25,26,27,28,29], 11 'C': [110,111,112,113,114], 12 'D': [125,126,127,128,129], 13 'E': [222,224,226,228,230]}, 14 index=['ONE', 'TWO', 'THREE','FOUR','FIVE']) 15 16#シリアル値を変換 閏年補正あり 17df_sample['ds']=pd.to_timedelta(df_sample['ds'].astype('float') - 2, unit='D') + pd.to_datetime('1900/1/1') 18 19#関数でできないか 20i = 1 21def func(): 22 _df = df_sample.iloc[:,[0,i]] 23 24#prophetの書式に揃える'y''ds' 25 _df.columns = ['ds','y'] 26 27#prophetへ投入 28#モデルの構築 29 model = Prophet() 30 model.fit(_df) 31 32#5日先まで予測 33 future = model.make_future_dataframe(5,freq='d') 34 forecast_d = model.predict(future) 35 forecast_agg = forecast_d.iloc[:,[0,-1]] 36 37#forecastに_dfを結合 38 df_merge = pd.merge(forecast_agg,_df,on='ds',how='left') 39 40#columnの並べ替えと必要事項のみ 41 df_m = df_merge.iloc[:,[0,1,-1]] 42 43#シンプルに結合できるようにもとのdfを必要列のみに絞る 44 df_s = df_sample.iloc[:,[0,i]] 45 46#meage結合 47 df_m_merge = pd.merge(df_m,df_s,on='ds',how='left') 48 df_drop = df_m_merge.drop('y',axis=1) 49 print(df_drop) 50 51#printで表示 52for i in range(4): 53 i += 1 54 print(func()) 55

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

全てのデータフレームのカラムが同じならば、以下のようにしてみてください。
同じではない場合は事前に揃える必要があります。

まず、funcを以下のように変更してください。
def func(i): #引数でiを渡す。
print(df_drop) を
return df_drop に変更する。

total_df = pd.concat([func(i) for i in range(1, 5, 1)])
で結合したデータフレームがtotal_dfに入るはずです。

投稿2021/05/02 09:57

ppaul

総合スコア24666

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

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

jimmyjimmy

2021/05/02 11:10

初めての投稿だったのですが、即答に感激しております。 concatのなかに[func(i) for i in range(1, 5, 1)]にいれる発想とかどのように考えればよいのでしょうか? ネット検索してもpd.concat([s1, s2], axis=1)ぐらいで、せいぜい列方向に程度しか検索できずにいました。数日進めず今回投稿にチャレンジしてみました。 せっかくご回答頂けましたので色々いじって試してみたいと思います。 本当にありがとうございました。
ppaul

2021/05/03 05:00

concatのなかに[func(i) for i in range(1, 5, 1)]にいれる発想 こういうのは慣れといえば慣れですね。 アイスクリームを食べたいけれども冷蔵庫がない、だから冷蔵庫を買おうという方法だけでなく、コンビニの隣に引っ越せば冷蔵庫はいらないとか、雪印に就職するのはどうかとか、実現性はともかくとして、複数の答えを考えるのを頭の体操としてやってみるのがいいかもしれません。 ただ、手持ちの情報から出来ることとやりたいことの間が直接につながらないときは、いろいろな可能性、いろいろな組み合わせを考えるという習慣を身につけておくと、プログラミング以外でも役に立ちます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問