У меня есть фрейм данных с 2 столбцами, которые представляют измерение X & Y двумерного массива, который необходимо создать.Значение в массиве 2D будет получено из другого столбца в кадре данных.Если в кадре данных имеется более 1 столбца значений, необходимо создать такое же количество 2D-списков.
До сих пор мне удавалось создать 1 2D список, предполагая, что в кадре данных только 1 столбец значений.Я создал пустой 2D-список того же измерения на основе столбцов X & Y в кадре данных.Затем я перебираю каждую строку кадра данных и заполняю 2D-список, основываясь на значении X & Y в этой строке.
Пример кадра данных.X представляет «столбцы» 2D-списка, а Y представляет «строки» 2D-списка.В этом случае 2D список 3х2.Столбец (numeric_result, Voltage) заполнит список 2D.
| parent | child | numeric_result | X | Y |
index | | voltage |
0 | xy | a | 1.2 | 1 | 1 |
1 | xy | a | 1.1 | 2 | 1 |
2 | xy | a | 1.2 | 3 | 1 |
3 | xy | a | 1.1 | 1 | 2 |
4 | xy | a | 1.0 | 2 | 2 |
5 | xy | a | 1.3 | 3 | 2 |
Сначала я создаю 2D-список:
rows = 2
cols = 3
def make2dList(rows, cols):
a=[]
for row in range(rows): a += [[0]*cols]
return a
list2d = make2dList(rows, cols)
Затем я заполняю список.
def fill2dlist(a, dataframe):
# Loop through each row of dataframe
for i in range(len(dataframe.index)):
col = int(dataframe.iloc[i].X)
row = int(dataframe.iloc[i].Y)
a[row-1][col-1] = (pd.to_numeric(dataframe.loc[i,'numeric_result'].values[0]))
return a
finallist = modify2dlist(list2d, dataframe)
print(finallist)
[[1.2, 1.1, 1.2],[1.1, 1.0, 1.3]]
Это кажется неэффективным.Есть ли способ векторизовать это или как-то сделать это быстрее?
Кроме того, я хочу создать новый фрейм данных, как показано ниже, где много комбинаций родитель и потомок.Любая помощь будет благодарна за то, как создать этот фрейм данных.Спасибо!
| parent | child | numeric_result_list |
index | | voltage |
0 | xy | a | [[1.2, 1.1, 1.2], [1.1, 1.0, 1.3]] |
1 | xy | b | [[1.1, 1.0, 1.1], [1.4, 1.3, 1.5]] |
2 | xy | c | [[1.1, 1.0, 1.6], [1.4, 1.8, 1.5]] |
3 | yz | e | [[1.4, 1.2, 1.2], [1.7, 1.2, 1.0]] |
Редактируйте здесь мой код для создания кадра данных с 2D-списком.Любая помощь будет оценена, чтобы сделать ее эффективной.
# Create an empty dataframe with column names
dffinal = pd.DataFrame(columns=['parent','child','numeric_result_list'])
# Group by 'parent' and 'child'
parent_child = df2.groupby(['parent', 'child'])
i = 1
for name, group in parent_child:
print('Processing: ', name)
group = group.reset_index(drop=True)
_array2d_ = make2dList(rows, cols)
_array2d_ = modify2dlist(_array2d_, _group_)
dffinal.loc[i] = [name[0], name[1], _array2d_]
i = i+1
print('done')
dff = dff.reset_index(drop=True)