我试图计算数据框中特定列的中位数和计数:
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>
上面的代码中有几个错误
您的
Total
列不是数字类型(正如您在注释中指出的,它是一个字符串)。我假设您可以更改Total
列(尽管是永久性的),您的代码可以工作吗?我无法访问您的数据,因此无法完全检查您的groupby
函数是否正常工作下面是将字符串更改为list的代码(如注释中所述)。不确定这是否是您真正想要的。str2lst = lambda s: s.split(",") df['Total'] = [str2lst(i) for i in df['Total']]
编辑:在查看数据帧(并意识到
Total
是一个数字而不是一个列表)之后,我发现了几个包含列名作为值的行。删除这些以及将字符串值更改为浮点类型:现在运行agg()就可以知道问题中的agg()是如何工作的了。以下是我的结果:
在您的上一个代码条目中,
groupby
具有一个您试图使用的分组方法。直观地想一想,你是如何对变量进行分组的?如果我指示你将一组卡片组合在一起,你会问如何?按颜色?数字套装?您告诉Python对Department
进行分组,但没有告诉它您希望它如何分组。因此Python返回了一个“…generic.DataFrameGroupBy对象”尝试执行
df...groupby('Department').count()
,您将看到df
按Department
分组您不需要再次调用部门变量。您也可以将np.size更改为“count”。请尝试以下代码:
df[df['Department'].isin(Departments_top10)].Total.groupby('Department').agg([np.median,'count'])
相关问题 更多 >
编程相关推荐