2015-03-05 3 views
1

Я немного новичок в Python/Pandas, и я продолжаю работать в этом конкретном прецеденте, что я не могу найти способ обойти. Я хотел бы создать серию DataFrames с именами, которые итеративно создаются. Вот пример того, что я хотел бы работать в теорииНазовите dataframe с использованием итеративно созданной строки в Pandas/Python

list1_A = DataFrame([(1,3,2),(2,4,5)]) 
list2_A = DataFrame([(1,5,2),(5,2,3)]) 
list3_A = DataFrame([(5,2,1),(3,3,6)]) 

listOfDFs = [list1_A, list2_A, list3_A] 
for i in range(len(listofDFs)): 
    'list'+str(i)+'A' = 'list'+str(i)+'A' + 5 

Я попробовал несколько способов обойти эту проблему, но это случай использования, который продолжает придумывать для меня. В R я использовал назначение ('dfName', value).

+0

Почему вы хотите, чтобы сделать это вместо того, чтобы просто использовать свой список? Вы действительно ничего не получаете, набирая 'list1_A' вместо' listOfDFs [0] '. – BrenBarn

+0

В numpy я бы сделал трехмерный массив. Я думаю, что panda-ish (ailuropodic?) Способ сделать иерархически индексированный DataFrame, в котором ваши итеративно созданные имена являются метками столбцов во внешней иерархии. – cphlewis

+1

Также эта строка кажется просто странной, а также синтаксическая ошибка: ''list' + str (i) + 'A' = 'list' + str (i) + 'A' + 5'. Что вы хотите создать? Возможно, вы хотите перебирать DF: 'для i в listofDFs: i + = 5' изменяет каждый DF на месте. – cphlewis

ответ

0

Воспользовавшись панды, начиная с конца кода:

import pandas as pd 
allDFs = pd.concat(listOfDFs) 
mI = pd.MultiIndex.from_arrays([['list'+i+'A' for i in list('112233')],[0,1]*3],names=['A','B']) 
allDFs.index=mI 

в результате нескольких индексированных DataFrame:

  0 1 2 
A  B   
list1A 0 1 3 2 
     1 2 4 5 
list2A 0 1 5 2 
     1 5 2 3 
list3A 0 5 2 1 
     1 3 3 6 

и есть так много панды могут сделать с dataframe мультииндексированных: http://pandas.pydata.org/pandas-docs/dev/advanced.html#advanced , Например, нарезка или выбор на любой из критериев и ходовых испытаний или операций:

allDFs.xs(0,level='B')[0]==1 
A 
list1A  True 
list2A  True 
list3A False 
Смежные вопросы