2016-01-18 3 views
2

у меня есть одна переменная в питона (значение может изменяться)Как генерировать динамические имена переменных в панд dataframe

a = 6 

Теперь, в зависимости от значений, которые я должен генерировать 6 кластеров из K-means clustering , который дает мне следующие метки в массив

y_km 
Out[36]: array([2, 5, 5, 2, 5, 0, 0, 1, 1, 4, 3, 4, 1, 0, 2, 2]) 

cluster_0 = np.where(y_km == 0) 
cluster_1 = np.where(y_km == 1) 
cluster_2 = np.where(y_km == 2) 
cluster_3 = np.where(y_km == 3) 
cluster_4 = np.where(y_km == 4) 
cluster_5 = np.where(y_km == 5) 

Затем я сохраняю местоположение каждой метки в массиве для разных переменных. Я хочу, чтобы автоматизировать этот процесс, так что я не должен явно писать код для имен переменных (cluster_0,cluster_1,cluster_2...)

for i in range(a): 
    cluster_'%d'%i = np.where(y_km == i) 

я делаю выше, но это дает мне синтаксическую ошибку. Тогда я определяю один столбец в dataframe tsp_data_unique

tsp_data_unique['Clusters'] = 'Null' 

Тогда я делаю следующее, чтобы назначить соответствующие кластерные метки в dataframe.

tsp_data_unique['Clusters'].iloc[cluster_0] = 'Cluster 1' 
tsp_data_unique['Clusters'].iloc[cluster_1] = 'Cluster 2' 
tsp_data_unique['Clusters'].iloc[cluster_2] = 'Cluster 3' 
tsp_data_unique['Clusters'].iloc[cluster_3] = 'Cluster 4' 
tsp_data_unique['Clusters'].iloc[cluster_4] = 'Cluster 5' 
tsp_data_unique['Clusters'].iloc[cluster_5] = 'Cluster 6' 

Могу ли я автоматизировать вышеуказанный процесс.

ответ

2

Как правило, рекомендуется использовать только dict(), а затем вместо клавиш «динамические переменные имена» использовать словарь. Вы можете использовать:

clusters = {} 
for i in range(a): 
    clusters['cluster_{}'.format(i)] = np.where(y_km == i) 

Вы можете получить доступ к значениям в словаре, используя, например, clusters['cluster_1'].

+0

спасибо за ваш ответ. Я отредактировал вопрос. – Neil

+0

Могу ли я генерировать строки «Cluster 1, Cluster 2 ...» динамически в зависимости от значения переменной 'a' – Neil

+0

Я делаю так:' tsp_data_unique ['Clusters']. Iloc ['cluster _ {}'. Format (i)] = 'Cluster {}'. format (i + 1) ', но он дает мне значение ValueError: может индексировать только по местоположению с целым, целым фрагментом (точка START ВКЛЮЧЕНА, конечная точка EXCLUDED), listlike of integers, boolean array] ' – Neil

2

Я хочу предложить вам хранить ваши кластер в словаре: А код будет как:

clusters = dict() 
for i in range(a): 
    clusters[i] = np.where(y_km == i) 
Смежные вопросы