2017-04-16 47 views
1

我有一个包含多列的熊猫数据框。大量的列名可以循环使用。所以我做了列名的数组是这样的:如何使用列名称列表从旧数据框创建新熊猫数据框

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

现在我想打一个新的数据框大熊猫与具有父数据框的指数只有这些列。这个怎么做?

+2

你可以做'new_df = old_df [ycols]'? – Chuck

+0

@CMorris:你的答案给出了错误:KeyError:“['** _ ** d pred'] not in index” – suku

+0

所以你必须有一些列名**/** d? – Chuck

回答

1

好吧,所以你想创建一个新的数据框与新的列名称,与原始数据框的现有索引。

对于一些数据框:

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'] 

您可以通过执行指定新列:

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

这里,y_cols是新列名的列表。在你的代码中,你可以用ycols = ['{}_{}d pred'.format(ticker, i) for i in range(hm_days)]代替这一步。

要获得新的列,创建新列有一个占位符变量(在这种情况下0,因为它看起来像你使用数字数据),与相同的索引你的旧数据框:

# 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 

最后,对您的数据帧进行分片,以获得新数据帧的新列名称,并维护旧数据帧的索引。

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 
相关问题