Назначение значений столбцам на основе групп в пандах - PullRequest
0 голосов
/ 02 июля 2018

У меня есть набор данных, который выглядит примерно так:

data_set = pd.DataFrame([
    {'img_type': 'bias', 'CCD-TEMP': -10, 'explen': 0, 'mean': 1023.4234},
    {'img_type': 'bias', 'CCD-TEMP': -10, 'explen': 0, 'mean': 1024.4334},
    {'img_type': 'bias', 'CCD-TEMP': -15, 'explen': 0, 'mean': 1022.2344},
    {'img_type': 'bias', 'CCD-TEMP': -15, 'explen': 0, 'mean': 1021.1031},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 30, 'mean': 1025.9959},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 30, 'mean': 1023.3434},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 60, 'mean': 1020.1234},
    {'img_type': 'dark', 'CCD-TEMP': -10, 'explen': 60, 'mean': 1022.4234},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 30, 'mean': 1025.9959},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 30, 'mean': 1023.3434},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 60, 'mean': 1020.1234},
    {'img_type': 'dark', 'CCD-TEMP': -15, 'explen': 60, 'mean': 1022.4234},
    ])

То, что я пытаюсь сделать, это выделить строки img_type = 'bias', сгруппировать их по CCD-TEMP и вычислить среднее значение () среднего значения для каждой группы. Это, кажется, делает этот трюк:

>>> data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].mean()
... 
CCD-TEMP
-15    1021.66875
-10    1023.92840
Name: mean, dtype: float64

Теперь мне нужно применить эти значения к новому столбцу «Смещение» для группы всех строк на основе CCD-TEMP. Пока я пробовал несколько вещей, последняя попытка выглядела следующим образом:

>>> data_set['Offset'] = data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].mean()
>>> data_set
    CCD-TEMP  explen img_type       mean  Offset
0        -10       0     bias  1023.4234     NaN
1        -10       0     bias  1024.4334     NaN
2        -15       0     bias  1022.2344     NaN
3        -15       0     bias  1021.1031     NaN
4        -10      30     dark  1025.9959     NaN
5        -10      30     dark  1023.3434     NaN
6        -10      60     dark  1020.1234     NaN
7        -10      60     dark  1022.4234     NaN
8        -15      30     dark  1025.9959     NaN
9        -15      30     dark  1023.3434     NaN
10       -15      60     dark  1020.1234     NaN
11       -15      60     dark  1022.4234     NaN

Очевидно, что NaN - это не то, что мне нужно.

Как лучше всего подойти к чему-то подобному с пандами? Мне нужно будет сделать то же самое с группами ('CCD-TEMP', 'explen'), как только я преодолею это препятствие. Любые советы на этот счет также приветствуются.

1 Ответ

0 голосов
/ 02 июля 2018

Я думаю, что нужно, если хотите присвоить bias строк GroupBy.transform с mean:

data_set['Offset'] = data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].transform('mean')
print (data_set)
    CCD-TEMP  explen img_type       mean      Offset
0        -10       0     bias  1023.4234  1023.92840
1        -10       0     bias  1024.4334  1023.92840
2        -15       0     bias  1022.2344  1021.66875
3        -15       0     bias  1021.1031  1021.66875
4        -10      30     dark  1025.9959         NaN
5        -10      30     dark  1023.3434         NaN
6        -10      60     dark  1020.1234         NaN
7        -10      60     dark  1022.4234         NaN
8        -15      30     dark  1025.9959         NaN
9        -15      30     dark  1023.3434         NaN
10       -15      60     dark  1020.1234         NaN
11       -15      60     dark  1022.4234         NaN

Или, если необходимо, map вывод mean по столбцу CCD-TEMP:

s = data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].mean()
print (s)
CCD-TEMP
-15    1021.66875
-10    1023.92840
Name: mean, dtype: float64

data_set['Offset'] = data_set['CCD-TEMP'].map(s)
print (data_set)
    CCD-TEMP  explen img_type       mean      Offset
0        -10       0     bias  1023.4234  1023.92840
1        -10       0     bias  1024.4334  1023.92840
2        -15       0     bias  1022.2344  1021.66875
3        -15       0     bias  1021.1031  1021.66875
4        -10      30     dark  1025.9959  1023.92840
5        -10      30     dark  1023.3434  1023.92840
6        -10      60     dark  1020.1234  1023.92840
7        -10      60     dark  1022.4234  1023.92840
8        -15      30     dark  1025.9959  1021.66875
9        -15      30     dark  1023.3434  1021.66875
10       -15      60     dark  1020.1234  1021.66875
11       -15      60     dark  1022.4234  1021.66875
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...