2017-04-16 15 views
1

複数の列を持つpandasデータフレームがあります。列名のバルクはループすることができます。だから私はこのような列名の配列を作っています列名のリストを使用して古いデータフレームから新しいpandasデータフレームを作成する方法

ycols = ['{}_{}d pred'.format(ticker, i) for i in range(hm_days)] 

今、私はこれらの列は、親データフレームのインデックスを持つ新しいパンダのデータフレームを作りたいです。これを行う方法?

+2

あなたは 'new_df = old_df [ycols]'行うことができますか? – Chuck

+0

@CMorris:答えにエラーがあります:KeyError: "['** _ ** d pred']はインデックスにありません" – suku

+0

だから、いくつかの列名に '** _ ** d'が必要ですか? – Chuck

答えて

1

これで、元のデータフレームの既存のインデックスを使用して、新しい列名で新しいデータフレームを作成します。

いくつかのデータフレームのために

y_colsは新しい列名のリストで、

y_cols = ['x_pred','y_pred'] 
>>> ['x_pred','y_pred'] 

をここに:あなたが実行して、新しい列を指定することができます

old_df = pd.DataFrame({'x':[0,1,2,3],'y':[10,9,8,7]}) 
>>> 
    x y 
0 0 10 
1 1 9 
2 2 8 
3 3 7 

columns = list(old_df) 
>>> 
['x', 'y'] 

。コードでは、このステップをycols = ['{}_{}d pred'.format(ticker, i) for i in range(hm_days)]に置き換えます。

# Iterate over all columns names in y_cols 
for i in y_cols: 
    old_df[i]=0 
>>> old_df: 
    x y x_pred y_pred 
0 0 10  0  0 
1 1 9  0  0 
2 2 8  0  0 
3 3 7  0  0 
:古いデータフレームと同じインデックスと(あなたが数値データを使用しているように見えるとして、この場合 0に)プレースホルダ変数に新しい列を作成し、新しい列を取得するには

最後に、データフレームをスライスして、新しいデータフレームを新しい列名で取得し、古いデータフレームのインデックスを維持します。

df_new = old_df[y_cols] 
>>> 
    x_pred y_pred 
0  0  0 
1  0  0 
2  0  0 
3  0  0 

これは、あなたが持っている場合でも動作しますindexの名前:

 x y x_pred y_pred 
Date      
0  0 10  0  0 
1  1 9  0  0 
2  2 8  0  0 
3  3 7  0  0 
df_new = old_df[y_cols] 
     x_pred y_pred 
Date     
0   0  0 
1   0  0 
2   0  0 
3   0  0 
関連する問題