Обновление 1: После понимания проблемы медленных вычислений в OP из-за большого размера информационного кадра, вот обновление.
Проверьте dtypes столбцов, используя all_sam.dtypes
, и размер (в Мб) вашего фрейма данных, используя:
all_sam.memory_usage(deep=True) / 1024 ** 2
Подумайте об изменении имени столбца 'SAMAC.1' на 'SAMAC_1', так как это может вызвать ошибку в следующих строках. Перед обработкой измените dtypes для «REG», «SAMAC» и «SAMAC_1» на «категорические»:
all_sam.REG = all_sam.REG.astype('category')
all_sam.SAMAC = all_sam.SAMAC.astype('category')
all_sam.SAMAC_1 = all_sam.SAMAC_1.astype('category')
В зависимости от ваших требований вы можете уменьшить dtype столбца «Значение» до float16, int16, int8 и т. Д., Используя следующий код:
all_sam.Value = all_sam.Value.astype('float16')
Проверьте размер еще раз.
all_sam.memory_usage(deep=True) / 1024 ** 2
Надеюсь, это позволит ускорить вычисления.
Я взял небольшой примерный фрейм данных, чтобы найти решение вашей проблемы.
import pandas as pd
import numpy as np
df = pd.DataFrame( {'REG':['A','A','A','A','A','A','B','B','B','B','B','B'], 'SAMAC1':['a','a','a','b','b','b','c','c','c','d','d','d'], 'SAMAC':['p','q','r','p','q','r','p','q','r','p','q','r'], 'value':[0,0,0,0,0,0,0,0,0,0,0,0]})
array_ = df[['REG','SAMAC1','SAMAC']].values.transpose()
index = pd.MultiIndex.from_arrays(array_, names=('REG', 'SAMAC1','SAMAC'))
df2 = df['value']
df2.index=index
country_labels = df2.index.get_level_values(0)
country_unique = country_labels.unique()
result_arr = []
for c in country_unique:
df3 = df2[df2.index.get_level_values(0) == c]
result_arr.append(df3.unstack().values)
result_arr = np.array(result_arr)
print(result_arr.shape)
Выход: (2,2,3)