Используйте GroupBy.transform
с лямбда-функцией для возврата Series
с тем же размером, что и оригинал DataFrame
:
dt['Column2'] = (dt.groupby(pd.qcut(dt['Column1'], 3))['Column1']
.transform(lambda x: x.max() + x.min()) / 2)
Или используйте двойное transform
с add
иdiv
:
g = dt.groupby(pd.qcut(dt['Column1'], 3))
dt['Column2'] = g['Column1'].transform('max').add(g['Column1'].transform('min')).div(2)
print (dt)
Column1 Column2
0 1 2.0
1 2 2.0
2 3 2.0
3 4 5.0
4 5 5.0
5 6 5.0
6 7 8.0
7 8 8.0
8 9 8.0
РЕДАКТИРОВАТЬ:
cols = ['Column1']
for col in cols:
dt[f'New {col}'] = (dt.groupby(pd.qcut(dt[col], 3))[col]
.transform(lambda x: x.max() + x.min()) / 2)
print (dt)
Column1 New Column1
0 1 2.0
1 2 2.0
2 3 2.0
3 4 5.0
4 5 5.0
5 6 5.0
6 7 8.0
7 8 8.0
8 9 8.0