Как назначить несколько переменных DataFrame, используя цикл for? - PullRequest
1 голос
/ 25 апреля 2019

Я хочу разделить DataFrame на основе различных категориальных значений столбца (Q14) и присвоить имена переменным для результирующего DataFrame отдельно. data_int.Q14 имеет 4 уникальных значения (2,3,4,5). Как я могу создать отдельные имена строковых переменных для DataFrames, используя цикл for? Вот изображение основного DataFrame (data_int)

fleet_type = data_int.Q14.unique()
for i in data_int.Q14:
  for uni in fleet_type:
    if i == uni:
      data_'{}'.format{uni} = data_int #I tried to assign the unique values to identify the DataFrames uniquely. 

File "<ipython-input-25-2200e7c4c3b7>", line 5
    data_'{}'.format{uni} = data_int
            ^
SyntaxError: invalid syntax

В идеале, я хочу использовать списочное понимание для этого конкретного случая, как показано ниже,

[data_int for i in data_int.Q14 if i == 2]

но я не могу определить имя переменных DataFrame.

В конечном итоге новый DataFrame должен быть назван следующим образом:

fleet_data_list = ['fleet_type_{}'.format(i) for i in data_int.Q14.unique()]
fleet_data_list
  • fleet_type_2 = (new_dataframe)
  • fleet_type_3 = (new_dataframe)
  • fleet_type_4 = (new_dataframe)
  • fleet_type_5 = (new_dataframe)

Я не смог найти способ использовать fleet_data_list для определения переменной. Есть идеи, как мне это сделать?

1 Ответ

1 голос
/ 25 апреля 2019

Я думаю, что здесь лучше всего создать словарь DataFrames путем преобразования объекта groupby в кортежи, а затем в dicts:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'Q14':[4,3,2,2,4,5],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

dfs = dict(tuple(df.groupby('Q14')))
print (dfs)
{2:    A  B  C  Q14  E  F
2  c  4  9    2  6  a
3  d  5  4    2  9  b, 3:    A  B  C  Q14  E  F
1  b  5  8    3  3  a, 4:    A  B  C  Q14  E  F
0  a  4  7    4  5  a
4  e  5  2    4  2  b, 5:    A  B  C  Q14  E  F
5  f  4  3    5  4  b}

И выберите с помощью клавиш:

print (dfs[2])
   A  B  C  Q14  E  F
2  c  4  9    2  6  a
3  d  5  4    2  9  b

То, что вам нужно, возможно, но не рекомендуется :

for i, g in df.groupby('Q14'):
    globals()['fleet_type_{}'.format(i)] = g

print (fleet_type_2 )
   A  B  C  Q14  E  F
2  c  4  9    2  6  a
3  d  5  4    2  9  b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...