我成功地从数据框中的列返回计数,但是在尝试将结果导入列时得到 NaN 值

Posted

技术标签:

【中文标题】我成功地从数据框中的列返回计数,但是在尝试将结果导入列时得到 NaN 值【英文标题】:I am returning a count from a column in a dataframe successfully, but I get NaN value when trying to import results into a column 【发布时间】:2020-08-21 18:51:24 【问题描述】:

我是 ArcGIS API for Python 的新手,我正在尝试使用 ArcGIS Pro 10.5 中的 Notebook 创建一个工具,该工具将重新设计一个表(csv 文件)。数据框的标题为 data_df 我需要计算每个国家/地区特定年龄组(1 岁以下、1-2 岁、3-4 岁、5-12 岁、 13-17 岁,18 岁及以上)。我的数据样本设置如下:

国家年龄性别

美国 3 M 美国 5 楼 美国 10 M F 加拿大 0 M 加拿大 1 M 加拿大 9 F 墨西哥 13 M 墨西哥 18 F

我创建了一个 python sn-p,它将给我我正在寻找的计数和总和。这个例子给了我 1-2yrs 组的计数,它有效!

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 值:

国家年龄性别 Under1 Yr1-2 Yr3-4 Yr5-12 Yr13-17 Yr18Older

美国 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】:

考虑创建一个字典,您可以使用它来重新映射您的值。然后使用 one-hot 编码。

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

【讨论】:

以上是关于我成功地从数据框中的列返回计数,但是在尝试将结果导入列时得到 NaN 值的主要内容,如果未能解决你的问题,请参考以下文章

在 read_csv 之后选择 pandas 数据框中的列时出现关键错误

我正在尝试在另一个数据框的列中查找数据框中的列的元素,但 index() 对我不起作用

将计数行视为查询结果中的列

是否有python代码可以从数据框中的列中转移和总计/计数数据

将 func 应用于 R 数据框中的所有元素(按列)[重复]

Pyspark:如何将现有非空列的元组列表作为数据框中的列值之一返回