Python数据框应用函数groupby和每列

时间:2020-04-11 13:03:19

标签: python pandas pandas-groupby data-science

我有一个数据框:

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 个答案:

答案 0 :(得分:1)

使用GroupBy.transformSeries.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