Создать столбцы на основе бинов - PullRequest
0 голосов
/ 24 октября 2018

У меня есть данные:

# dt
Column1     
      1
      2
      3
      4
      5
      6
      7
      8
      9

Я хочу создать новый столбец по средним значениям для ячеек min и max.

# dt
Column1    Column2
      1          2
      2          2
      3          2
      4          5
      5          5
      6          5
      7          8
      8          8
      9          8

pd.qcut(dt['Column1'], 3)

Итак, column2 = (мин. Bin + макс. Bin) / 2.

1 Ответ

0 голосов
/ 24 октября 2018

Используйте 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
...