【发布时间】:2023-01-23 00:38:59
【问题描述】:
我不明白 pandas 的 groupby 的输出。我从一个包含 5 个字段/列(邮编、城市、位置、人口、州)的 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()
但是,这返回了一个 Series 而不是 DataFrame:
>>> 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'])]
但是因为我有一个系列而不是一个 DataFrame,所以我不能。我也无法强制转换为 DataFrame。
我现在想知道的是:
- 为什么我没有返回 DataFrame 而不是 Series?
- 我怎样才能得到一张可以让我查询城市人口的表格?我可以使用从 groupby 获得的系列,还是应该采取不同的方法?
【问题讨论】:
-
使用 as_index -
df0.groupby(['city','state'], as_index=False)['pop'].sum() -
大熊猫是如此不直观:(只是有同样的问题