对我的数据帧使用agg(),没有结果

2024-09-26 22:50:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算数据框中特定列的中位数和计数:

large_depts = df[df['Department'].isin(Departments_top10)]\
                    [['Total', 'Department']]\
                    .groupby('Department')\
                    .agg([np.median, np.size])
print(large_depts)

它说:

ValueError: no results

但是当我检查数据帧时,我的数据帧中有一些值:

large_depts = df[df['Department'].isin(Departments_top10)]\
                    [['Total', 'Department']]
print(large_depts)

            Total                      Department
0      677,680.65        Boston Police Department
1      250,893.61        Boston Police Department
2      208,676.89        Boston Police Department
3      319,319.93        Boston Police Department
4      577,123.44        Boston Police Department

我发现当我尝试groupby时,出现了一些问题,但我不知道为什么:

large_depts = df[df['Department'].isin(Departments_top10)]\
                    [['Total', 'Department']]\
                    .groupby('Department')
print(large_depts)

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000000000D1C0A08>

以下是数据:https://data.boston.gov/dataset/418983dc-7cae-42bb-88e4-d56f5adcf869/resource/31358fd1-849a-48e0-8285-e813f6efbdf1/download/employeeearningscy18full.csv


Tags: 数据dfnpbostontotaldepartmentlargeprint
2条回答

上面的代码中有几个错误

  1. 您的Total列不是数字类型(正如您在注释中指出的,它是一个字符串)。我假设您可以更改Total列(尽管是永久性的),您的代码可以工作吗?我无法访问您的数据,因此无法完全检查您的groupby函数是否正常工作

    下面是将字符串更改为list的代码(如注释中所述)。不确定这是否是您真正想要的。

    str2lst = lambda s: s.split(",") df['Total'] = [str2lst(i) for i in df['Total']]

    编辑:在查看数据帧(并意识到Total是一个数字而不是一个列表)之后,我发现了几个包含列名作为值的行。删除这些以及将字符串值更改为浮点类型:

     df.drop([12556, 22124, 22123, 22122, 22121, 22125], inplace = True)
     str2float = lambda s: s.replace(',', '')
     df['Total'] = [float(str2float(i)) for i in df['Total']]
    

    现在运行agg()就可以知道问题中的agg()是如何工作的了。以下是我的结果:

                                              Total
    Department                         median       size
    BPS Facility Management            53183.315    668.0
    BPS Special Education              49875.830    831.0
    BPS Substitute Teachers/Nurs        6164.070    1196.0
    BPS Transportation                 20972.770    506.0
    Boston Cntr - Youth & Families     44492.625    584.0
    
  2. 在您的上一个代码条目中,groupby具有一个您试图使用的分组方法。直观地想一想,你是如何对变量进行分组的?如果我指示你将一组卡片组合在一起,你会问如何?按颜色?数字套装?您告诉Python对Department进行分组,但没有告诉它您希望它如何分组。因此Python返回了一个“…generic.DataFrameGroupBy对象”

    尝试执行df...groupby('Department').count(),您将看到dfDepartment分组

您不需要再次调用部门变量。您也可以将np.size更改为“count”。请尝试以下代码:

df[df['Department'].isin(Departments_top10)].Total.groupby('Department').agg([np.median,'count'])

相关问题 更多 >

    热门问题