2017-12-29 40 views
2

注:実例。予測に嫌われてはいけません。私はそれについて助言する必要はありません。これは厳密にパンダのハウツーの質問です。Pandas Concat列の末尾に異なるサイズのデータ​​フレーム

例 - ワンのソリューション

私は2つの異なるサイズのデータ​​フレーム、予測を表す売上と1を表す1つを持っています。

sales = pd.DataFrame({'sales':[5,3,5,6,4,4,5,6,7,5]}) 
forecast = pd.DataFrame({'forecast':[5,5.5,6,5]}) 

予想は、売上番号[5,6,7、5]のリストの最後にある最新の売上である必要があります。他の時間に、私は他の場所でそれが欲しいかもしれません(理由を聞かないでください、私はちょうどこの方法が必要です)。

これは動作します:

df = pd.concat([sales, forecast], ignore_index=True, axis=1) 
df.columns = ['sales', 'forecast'] # Not necessary, making next command pretty 
df.forecast = df.forecast.shift(len(sales) - len(forecast)) 

これは私に望ましい結果得られます

enter image description here

を私が知りたいのは何問

がある:私はに連結することができます追加のシフトを実行せずに販売データの末尾(最後のコマンド)?私は2つではなく1つのステップでこれをやりたいと思います。コンカットなどは問題ありませんが、私はシフトをスキップしたいと思います。

私は2行のコードを抱いていません。大丈夫。可能な限り最高のパフォーマンスを備えたソリューションが欲しい。私のアプリケーションは、膨大な量のため、毎ミリ秒に敏感です。それははるかに高速ですが、あなたが行うことができれば

答えて

2

わからない

その後、

forecast 
6  5.0 
7  5.5 
8  6.0 
9  5.0 

と単に

pd.concat([sales, forecast], axis=1) 

望ましい結果得与え

sales = pd.DataFrame({'sales':[5,3,5,6,4,4,5,6,7,5]}) 
forecast = pd.DataFrame({'forecast':[5,5.5,6,5]}) 

forecast.index = sales.index[-forecast.shape[0]:] 

sales forecast 
0  5  NaN 
1  3  NaN 
2  5  NaN 
3  6  NaN 
4  4  NaN 
5  4  NaN 
6  5  5.0 
7  6  5.5 
8  7  6.0 
9  5  5.0 
を同じ考えを使用して

一行溶液は、コメントで@Darkにより述べたように、次のようになります同じ出力を与える

pd.concat([sales, forecast.set_axis(sales.index[-len(forecast):], inplace=False)], axis=1) 

+0

pd.concat([sales、forecast.set_axis(sales.index [-len(forecast):]、inplace = False)]、1) 'のようにします。私は私の答えを削除しました – Dark

+1

@ダーク:ありがとう、私はそれを追加しました。 – Cleb

+1

印象深い!私は、この操作で販売DFのインデックスを予測インデックスにコピーするのが好きです。私が最初にやったより多くの記述が必要な人のために、この例のforecast.shapeは、(4,1) - 4行、1列のタプルを与えます。 -forecast.shape [0]はタプルの4つの部分を取得し、負の値はDFで後方に移動します。したがって、販売インデックスの最後の4行が得られ、予測インデックスは販売DFの終了時と同じインデックスになります。 Concatはインデックスと結婚します。ありがとう@クレブ。とても素敵な仕事。 –

関連する問題