2015-10-02 4 views
2

У меня есть dataframe с колонки под названием Dir, который содержит пять значений: N, S, E, W и C. Я разделил их на отдельные dataframes так:Создание панды dataframes с функцией понимания

df_N = df[(df['Dir'] == 'N')] 
df_S = df[(df['Dir'] == 'S')] 
df_E = df[(df['Dir'] == 'E')] 
df_W = df[(df['Dir'] == 'W')] 
df_C = df[(df['Dir'] == 'C')] 

Однако я хотел бы создать понимание функции или списка, которое делает это для меня, поэтому, если значения в данных изменяются, мне не нужно его перекодировать.

Я создал список значений, например, так:

CP_Vals = Series.unique(dftc2['iDir']).tolist() 

Но не имея большой сделки OFD опыт в Python, я изо всех сил, чтобы создать что-то, что автоматизирует это. Я думал что-то вроде:

for x in CP_Vals: 
    df_x = df[(df['iDir'] == '%s' % x)] 

Возможно ли это? Заранее спасибо!

+0

Могу ли я спросить, зачем вам это нужно? Вы уже можете получить уникальные значения с помощью 'df ['Dir']. Unique()', поэтому не могли бы вы просто отфильтровать ваш df, используя эти значения, а не создавать новые dfs для каждого значения? – EdChum

+0

Я собираюсь создать отдельные столбцы для значений N, S, E, W и C, чтобы объединиться с другим набором данных. – Tom

+0

Вы все еще можете достичь этого, не создавая новые dfs, просто фильтруя master df, используя уникальные значения, просто предложение – EdChum

ответ

4

Вы можете использовать словарь для хранения различных данных, которые вы получаете с соответствующим именем в качестве ключа. Пример:

CP_Vals = dftc2['iDir'].unique().tolist() 
df_dict = {'df_{}'.format(x): df[(df['iDir'] == x)] for x in CP_Vals} 

Обратите внимание, что понимание слова доступно только в Python 2.7+. Кроме того, после этого вы можете получить доступ к определенному DataFrame как df_dict['df_N'] и т. Д.

+1

Возможно более читаемое, чтобы переписать первую строку как 'dftc2 ['iDir']. Unique() .list () 'IMO – EdChum

+0

Да, правильно, изменил его, спасибо :-) –

+0

Просто чтобы сказать спасибо за ответы здесь! Это сработало очень хорошо! – Tom

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