#python #pandas
Вопрос:
У меня есть csv-файл, представляющий измерения, выполненные в матрице:
A B C
1
2
3
в формате csv:
- Первые 2 столбца («Col» и «строка») представляют координаты матрицы
- Остальные столбцы представляют настройку измерения (0, 1 или 2).
Поскольку измерения повторяются, настройка повторяется: (0,1,2,1,0) столбцы повторяются.
Вот наборы данных
Col row 0 1 2 1 0 #these represent measurement setup
1 A 1 0.7 0.5 0.4 0.5
2 B 1 0.4 0.2 0.1 0.1
3 C 1 0.3 0.2 0.1 0.1
я хочу:
- импорт файла
- поворот для создания столбцов «col — строка — настройка — итерация»
где настройка представляет собой настройку измерения (0,1,2,1,0)
и итерация подсчитывает измерения,выполненные для одного пикселя (col, пара строк) (1,2,3,4,5)
Окончательный набор дат должен выглядеть следующим образом:
Col row setup iteration value
1 A 0 1 1
1 A 1 2 0.7
1 A 2 3 0.5
1 A 1 4 0.4
1 A 0 5 0.5
2 B 0 1 1
2 B 1 2 0.4
2 B 2 3 0.2
2 B 1 4 0.1
2 B 0 5 0.1
.....etc
Ответ №1:
Вы хотите распаковать или расплавить свой фрейм данных:
df_orig = pd.read_csv('file.csv')
df = df_orig.melt(['Col', 'row'], var_name='setup')
Это дает:
Col row setup value
0 1 A 0 1.0
1 2 B 0 1.0
2 3 C 0 1.0
3 1 A 1 0.7
4 2 B 1 0.4
5 3 C 1 0.3
6 1 A 2 0.5
7 2 B 2 0.2
8 3 C 2 0.2
9 1 A 1.1 0.4
10 2 B 1.1 0.1
11 3 C 1.1 0.1
12 1 A 0.1 0.5
13 2 B 0.1 0.1
14 3 C 0.1 0.1
Поскольку по умолчанию (или для более старой версии) read_csv
имя столбца с дубликатом искажено, мы должны отменить настройку столбца:
df['setup'] = df['setup'].replace('\..*', '', regex=True)
Просто добавьте столбец итераций:
df['iteration'] = 1 df.index // len(df_orig)
и отсортируйте фрейм данных:
df.sort_values(['Col', 'row', 'iteration']).reset_index(drop=True)
получить:
Col row setup value iteration
0 1 A 0 1.0 0
1 1 A 1 0.7 1
2 1 A 2 0.5 2
3 1 A 1 0.4 3
4 1 A 0 0.5 4
5 2 B 0 1.0 0
6 2 B 1 0.4 1
7 2 B 2 0.2 2
8 2 B 1 0.1 3
9 2 B 0 0.1 4
10 3 C 0 1.0 0
11 3 C 1 0.3 1
12 3 C 2 0.2 2
13 3 C 1 0.1 3
14 3 C 0 0.1 4