Я успешно возвращаю счетчик из столбца в кадре данных, но получаю значение NaN при попытке импортировать результаты в столбец - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в ArcGIS API для Python, и я пытаюсь создать инструмент с помощью Notebook в ArcGIS Pro 10.5, который перепроектирует таблицу (файл csv). Фрейм данных называется data_df Мне нужно подсчитать количество возрастов для каждой страны, которые произошли в определенной возрастной группе (до 1 года, 1-2 года, 3-4 года, 5-12 лет, 13 лет. -17 лет, 18 лет и старше). Пример моих данных настроен следующим образом:

Страна Возраст Пол

США 3 млн. США 5 F США 10 MF Канада 0 млн Канада 1 млн Канада 9 F Мексика 13 млн Мексика 18 F

Я создал фрагмент python, который даст мне подсчет и сумму, которые я ищу. Этот пример дает мне счет для группы 1-2 года, и он работает!

data_df.loc[(data_df['Age'] >=1) & (data_df['Age'] <=2)].groupby('Country')['Age'].count()

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

data_df['Hague1_2'] = data_df.loc[(data_df['Age'] >=1) & (data_df['Age'] <=2)].groupby('Country')['Age'].count()

Результат должен выглядеть следующим образом, но вместо этого я получаю значения NaN:

Страна Возраст Пол до 1 года 1–2 года 3 -4 года 5-12 лет 13-17 лет 18 лет Пожилые

США 3 М 0 0 1 2 0 0 США 5 F 0 0 1 2 0 0 США 10 МФ 0 0 1 2 0 0 Канада 0 M 1 1 0 1 0 0 Канада 1 млн 0 млн 1 1 0 1 0 0 Канада 9 П 0 М 1 1 0 1 0 0 Мексика 13 млн 0 0 0 0 1 1 Мексика 18 F 0 0 0 0 1 1

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 16 мая 2020

Рассмотрите возможность создания словаря, который вы можете использовать для переназначения ваших значений. Затем используйте горячую кодировку.

import pandas as pd
df = pd.DataFrame([ ['USA', 3, 'M'], ['USA', 5, 'F'], ['USA', 10, 'F'], 
                    ['Canada', 0, 'M'],['Canada', 1, 'M'], ['Canada', 9, 'F'], 
                    ['Mexico', 13, 'M'],['Mexico', 18, 'F']], columns = ['Country', 'Age', 'Gender'])

remap_dct = { 0: "Under 1",
             1: "1-2yrs",
             2: "1-2yrs",
             3: "3-4yrs",
             4: "3-4yrs",
             5: "5-12yrs",
             6: "5-12yrs",
             7: "5-12yrs",
             8: "5-12yrs",
             9: "5-12yrs",
             10: "5-12yrs",
             11: "5-12yrs",
             12: "5-12yrs",
             13: "13-17yrs",
             14: "13-17yrs",
             15: "13-17yrs",
             16: "13-17yrs",
             17: "13-17yrs"}

df['AgeGroup'] = df['Age'].map(remap_dct)
df.loc[df['Age'] >= 18, 'AgeGroup'] = "18 & older"
df = df.join(pd.get_dummies(df['AgeGroup']))
df = df.drop('AgeGroup', axis=1)
print(df)

  Country  Age Gender  1-2yrs  13-17yrs  18 & older  3-4yrs  5-12yrs  Under 1
0     USA    3      M       0         0           0       1        0        0
1     USA    5      F       0         0           0       0        1        0
2     USA   10      F       0         0           0       0        1        0
3  Canada    0      M       0         0           0       0        0        1
4  Canada    1      M       1         0           0       0        0        0
5  Canada    9      F       0         0           0       0        1        0
6  Mexico   13      M       0         1           0       0        0        0
7  Mexico   18      F       0         0           1       0        0        0
...