Как рассчитать средние значения каждого возраста в соответствии со значениями в другом столбце в Пандах - PullRequest
0 голосов
/ 29 апреля 2019

Я ищу способ получить среднее семейное положение каждого возраста:

Например, для людей, которым 34 года, средний военный статус - Одинокий, для 35 это также Single и так далее.

Я группирую фрейм данных

df_edad_estado_civil.groupby(['Estado_Civil', 'Edad'], as_index=False).mean() 

но выдает такие ошибки, как:

DataError: No numeric types to aggregate

По сути, это часть моего DataFrame:


    Edad    Estado_Civil
0   38  Soltero
1   26  Casado
2   26  Soltero
4   38  Soltero
5   24  Soltero
6   28  Soltero
7   30  Casado
8   32  Soltero
9   19  Soltero
10  28  Soltero
11  45  Casado
12  27  Soltero
13  41  Casado
14  45  Casado
15  38  Soltero

Мне нужно получить список медианного статуса для каждого возраста, например:

years_old  status_mediam
  34         single
   .            .
  36          single
  37          married 
   38         married ....
   45         divorced and so on.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2019

Я думаю, что эти данные показывают линейность, потому что люди будут вступать в брак по мере взросления. Таким образом, он может быть представлен линейным уравнением. В основном, это может быть решено с помощью линейной регрессионной модели машинного обучения. Я думаю, что вы делаете какую-то модель машинного обучения. Во всяком случае, это пример кода, который я рассчитываю каждое среднее значение семейного положения.

data = [[38, 'Soltero'],
        [26, 'Casado'],
        [26, 'Soltero'],
        [38, 'Soltero'],
        [24, 'Soltero'],
        [28, 'Soltero'],
        [30, 'Casado'],
        [19, 'Soltero'], 
        [28, 'Soltero'],
        [45, 'Casado'],
        [27, 'Soltero'],
        [41, 'Casado'],
        [45, 'Casado'],
        [38, 'Soltero']]

df_edad_estado_civil = pd.DataFrame(data, columns=list(['Estado_Civil', 'Edad']))
result = df_edad_estado_civil['Estado_Civil'].groupby(df_edad_estado_civil['Edad']).mean() 
print (df_edad_estado_civil)
print (result)

Результат:

    Estado_Civil     Edad
0             38  Soltero
1             26   Casado
2             26  Soltero
3             38  Soltero
4             24  Soltero
5             28  Soltero
6             30   Casado
7             19  Soltero
8             28  Soltero
9             45   Casado
10            27  Soltero
11            41   Casado
12            45   Casado
13            38  Soltero
Edad
Casado     37.400000
Soltero    29.555556
0 голосов
/ 29 апреля 2019

Похоже, что вы ищете статистическое mode, которое является наиболее часто встречающимся значением:

df_edad_estado_civil.groupby('Edad')['Estado_Civil'].agg(pd.Series.mode)

См. Этот ответ для получения более подробной информации.

0 голосов
/ 29 апреля 2019

преобразовать столбец Estado_Civil в числовой тип с 0 для женатых и 1 для одиноких с чем-то вроде этого `df.Estado_Civil = df.Estado_Civil.apply (lambda x: 1 * (x == 'single')).Затем выполните групповое выполнение.

Также было бы полезно выбрать определенный столбец перед применением .mean(), например, df.groupby(['Estado_Civil', 'Edad'], as_index=False)['Estado_Civil'].mean()

...