Python датафрейм применяет функцию groupby и для каждого столбца - PullRequest
1 голос
/ 11 апреля 2020

У меня есть фрейм данных:

df = Condition A_value B_value
       15       2       3
       30       1       8
       45       5       1
       15       3       9
       30       4       6
       45       8       2
       15       5       2
       30       7       3
       45       9       1
       15       0       8
       30       8       7
       45       1       3

Я хочу применить sklearn.preprocessing.StandardScaler

Для каждого столбца по типу. (То есть он будет масштабировать столбец A_value для строк, где condition=15, затем A_value для 30, 45 и B_value для 15, затем 30, затем 45. Есть ли способ сделать это без итерации по всем группам? (например, однострочник?)

Как лучше всего это сделать?

1 Ответ

1 голос
/ 11 апреля 2020

Используйте GroupBy.transform для обработки каждого столбца по группам отдельно с добавлением Series.to_frame, DataFrame.set_index для обработки всех столбцов без Condition :

from sklearn.preprocessing import StandardScaler

f = lambda x: (StandardScaler().fit_transform(x.to_frame()))[:, 0]
df = df.set_index('Condition').groupby('Condition').transform(f).reset_index()
print (df)
    Condition   A_value   B_value
0          15 -0.277350 -0.821995
1          30 -1.460593  1.069045
2          45 -0.240966 -0.904534
3          15  0.277350  1.150793
4          30 -0.365148  0.000000
5          45  0.722897  0.301511
6          15  1.386750 -1.150793
7          30  0.730297 -1.603567
8          45  1.044185 -0.904534
9          15 -1.386750  0.821995
10         30  1.095445  0.534522
11         45 -1.526117  1.507557
...