Создание подколонок в панде Dataframe Python - PullRequest
0 голосов
/ 12 января 2019

У меня есть фрейм данных с несколькими столбцами

df = pd.DataFrame({"cylinders":[2,2,1,1],
                  "horsepower":[120,100,89,70],
                  "weight":[5400,6200,7200,1200]})


 cylinders horsepower weight
0  2          120       5400
1  2          100       6200 
2  1           80       7200
3  1           70       1200

Я хотел бы создать новый фрейм данных и сделать два вложенных столбца веса со средним значением и средним значением, в то время как они объединяются в цилиндры. Пример:

                        weight
  cylinders horsepower  median  mean
0  1          100       5299    5000
1  1          120       5100    5200
2  2           70       7200    6500
3  2           80       1200    1000

Для моих таблиц примеров я использовал случайные значения. Я не могу добиться этого. Я знаю, как получить медиану и иметь в виду, что это описано здесь в этом вопросе stackoverflow. :

df.weight.median()
df.weight.mean()
df.groupby('cylinders') #groupby cylinders

Но как создать эту подколонку?

1 Ответ

0 голосов
/ 12 января 2019

Следующий фрагмент кода добавляет два запрошенных столбца. Он группирует строки по цилиндрам, вычисляет среднее значение и медиану веса и объединяет исходный кадр данных и результат:

result = df.join(df.groupby('cylinders')['weight']\
           .agg(['mean', 'median']))\
           .sort_values(['cylinders', 'mean']).ffill()
#   cylinders  horsepower  weight    mean  median
#2          1          80    7200  5800.0  5800.0
#3          1          70    1200  5800.0  5800.0
#1          2         100    6200  4200.0  4200.0
#0          2         120    5400  4200.0  4200.0

У вас не может быть "подколонок" для выбранных столбцов в пандах. Если столбец имеет «вложенные столбцы», все остальные столбцы также должны иметь «вложенные столбцы». Это называется мультииндексацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...