我不理解pandas的groupby输出。我从一个有5个字段/列(zip、city、location、population和state)的DataFrame(df0
)开始。
>>> df0.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 29467 entries, 0 to 29466
Data columns (total 5 columns):
zip 29467 non-null object
city 29467 non-null object
loc 29467 non-null object
pop 29467 non-null int64
state 29467 non-null object
dtypes: int64(1), object(4)
memory usage: 1.1+ MB
我想获取每个城市的总人口数,但由于有多个邮政编码属于同一城市,因此我打算使用groupby.sum函数,如下所示:
df6 = df0.groupby(['city','state'])['pop'].sum()
然而,这返回的是一个序列而不是数据帧:
>>> df6.info()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 2672, in __getattr__
return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'info'
>>> type(df6)
<class 'pandas.core.series.Series'>
我希望能够通过类似的方法查询任何城市的人口数量:
df0[df0['city'].isin(['ALBANY'])]
但由于我拥有的是一个Series而不是DataFrame,因此我无法这样做。 我也无法强制将其转换为DataFrame。
现在我想知道的是:
- 为什么我没有得到一个DataFrame而是一个Series?
- 如何获得一个表格,让我可以查找城市的人口?我可以使用从groupby得到的系列吗,还是我应该采用不同的方法?
df0.groupby(['city','state'], as_index=False)['pop'].sum()
- Zero