2016-05-18 4 views
1

я пытаюсь дублировать столбец несколько раз из ФР, таких каксоздать несколько столбцов с 1 панд колонки

df.head() 

         close 
date      
2015-09-23 17:00:00 1.3324 
2015-09-23 17:01:00 1.3325 
2015-09-23 17:02:00 1.3323 
2015-09-23 17:03:00 1.3323 
2015-09-23 17:04:00 1.3323 

из определенного списка имя, я хочу, чтобы дублировать Колум столько времени, как есть имя в моем списке:

list =['a','b','c'] 

и получить

df.head() 

         close a  b  c 
date      
2015-09-23 17:00:00 1.3324 1.3324 1.3324 1.3324 
2015-09-23 17:01:00 1.3325 1.3325 1.3325 1.3325 
2015-09-23 17:02:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:03:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:04:00 1.3323 1.3323 1.3323 1.3323 

Я попытался

df[list] = df 

но столбцы должны быть такой же длины, как и ключ. Спасибо за вашу помощь!

ответ

1

Самый простой способ будет перебирать свой список и создать новый столбец для каждого ключа (побочное замечание: вы, вероятно, следует избегать использования list в качестве имени переменной, так как вы будете переписывать родной list):

keys = ['a','b','c'] 
for k in keys: 
    df[k] = df['close'] 

Если вы хотите сделать это в одной строке, без петли, вы можете сделать следующее:

keys = ['a','b','c'] 
df = df.join(pd.concat([df.close]*len(keys), keys=keys)) 

Перемещение наружу от середины, [df.close]*len(keys) создает список с таким количеством копий оригинала да taframe, поскольку в вашем списке есть ключи. Затем они объединяются в один фрейм данных с использованием pd.concat(), при этом имена столбцов задаются вместе с вашим списком (keys=keys). Теперь, когда у вас есть блок данных с повторяющимися столбцами, вы можете добавить его в исходный фреймворк с использованием df.join().

+0

я это прекрасно работать спасибо! Я стараюсь держаться подальше от цикла, но я думаю, что я буду использовать это :) о списке: спасибо за хорошее спасибо! –

+0

спасибо, что я искал! –

1

Вы можете использовать concat:

li = ['a','b','c'] 

df1 = pd.concat([df['close']]*(len(li)+1), axis=1, keys=['close'] + li) 
print (df1) 
         close  a  b  c 
date            
2015-09-23 17:00:00 1.3324 1.3324 1.3324 1.3324 
2015-09-23 17:01:00 1.3325 1.3325 1.3325 1.3325 
2015-09-23 17:02:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:03:00 1.3323 1.3323 1.3323 1.3323 
2015-09-23 17:04:00 1.3323 1.3323 1.3323 1.3323 
+0

спасибо работы тоже! –

Смежные вопросы