我成功地从数据框架中的一列中返回了一个计数,但当我试图将结果导入到一列中时,却得到了NaN值。

问题描述 投票:0回答:1

我是Python的ArcGIS API新手,我试图在ArcGIS Pro 10.5中使用Notebook创建一个工具,它将重新设计一个表(csv文件)。数据框的标题是 数据_df 我需要统计每个国家某个年龄组(1岁以下、1-2岁、3-4岁、5-12岁、13-17岁、18岁及以上)发生的年龄数量。我的数据样本设置如下。

国家 年龄 性别

美国 3 男 美国 5 女 美国 10 男 女 加拿大 0 男 加拿大 1 男 加拿大 9 女 墨西哥 13 男 墨西哥 18 女

我创建了一个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 M 0 0 1 2 0 0 美国 5 F 0 0 1 2 0 0 美国 10 M F 0 0 1 2 0 0 加拿大 0 M 1 1 0 1 0 0 加拿大 1 M 0 M 1 1 0 1 0 0 加拿大 9 F 0 M 1 1 0 1 0 0 墨西哥 13 M 0 0 0 0 1 1 墨西哥 18 F 0 0 0 0 1 1 1

任何帮助都是非常感激的

pandas jupyter-notebook pandas-groupby jupyter arcgis
1个回答
0
投票

考虑创建一个字典,你可以用它来重映射你的值。然后使用一键编码。

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
© www.soinside.com 2019 - 2024. All rights reserved.