2015-09-29 3 views
1

У меня есть кадр данных, который я импортировал из csv. Это идет что-то вроде этого:Как разбить фрейм данных pandas на основе префикса столбца

df 
A.1 B.1 A.2 B.2 
1 1 1 1 
2 2 2 2 

Мой вопрос, что было бы эффективным способом превратить это на отдельные кадры данных, только состоящих из элементов а и Б

df_a 
A.1 A.2 
1 1 
2 2 

df_b 
B.1 B.2 
1 1 
2 2 

Я не требователен, насколько имена столбцов, было бы хорошо, если бы их просто разделили до 1 и 2 и т. д., но не смогли найти хороший способ сделать это. Я также открыт для других/лучших способов достижения того, что я пытаюсь сделать, если это не имеет смысла для кого-то более осведомленного. Благодаря!

+0

Вы должны пойти с ответом @ unutbu, ИМО. – misterte

ответ

3

Вы можете использовать df.filter с регулярными выражениями шаблонов:

df_a, df_B = df.filter(regex=r'^A'), df.filter(regex=r'^B') 

или

df_a, df_B = df.filter(like='A'), df.filter(like='B') 

Обратите внимание, что если вы используете like='A' то все столбцы, имя содержит'A' будут выбраны. Если вы используете regex=r'^A', тогда будут выбраны только те столбцы, имя которых начинается с A.


In [7]: df 
Out[7]: 
    A.1 B.1 A.2 B.2 
0 1 1 1 1 
1 2 2 2 2 

In [8]: df_a, df_B = df.filter(regex=r'^A'), df.filter(regex=r'^B') 

In [9]: df_a 
Out[9]: 
    A.1 A.2 
0 1 1 
1 2 2 

In [10]: df_B 
Out[10]: 
    B.1 B.2 
0 1 1 
1 2 2 
1

Чтобы выбрать столбцы:

dfa = df[['A.1', 'A.2']] 

Чтобы изменить название столбцов:

dfa.reindex=["a1","a2"] 
1

Ok, если я правильно понимаю, вам просто нужно N новых dataframes по к их названию столбца.

dfa = df[[col for col in df.columns if col.startswith("A")]].copy() 
# same for dfb, dfc... 

copy() Обратите внимание, что требуется, если вы хотите, чтобы позже применить изменения к этому новому dataframe dfa. В противном случае, если я правильно помню, вы бы применяли изменения указателем, как при использовании словарей.

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