我怀疑这是我问题的更简单形式 here . [更新:不幸的是不是这样。]
如果你这样做(在 Pandas 0.11 中):
df = pd.DataFrame([[1,2],[1,3],[2,4]],columns='a b'.split())
print df
g = df.groupby('a').count()
print type(g)
print g
你得到了预期的结果:
a b
0 1 2
1 1 3
2 2 4
<class 'pandas.core.frame.DataFrame'>
a b
a
1 2 2
2 1 1
但是如果只有一个结果组,你会得到一个非常奇怪的系列:
df = pd.DataFrame([[1,2],[1,3],[1,4]],columns='a b'.split())
...
a b
0 1 2
1 1 3
2 1 4
<class 'pandas.core.series.Series'>
a
1 a 3
b 3
Name: 1, dtype: int64
但我宁愿结果是一个等效于此的 DataFrame:
print pd.DataFrame([[3,3]],index=pd.Index([1],name='a'),columns='a b'.split())
a b
a
1 3 3
我对如何从系列中轻松获得它感到困惑(并且不确定为什么我首先得到它)。
最佳答案
在 pandas 0.12 中,这完全符合您的要求。
In [3]: df = pd.DataFrame([[1,2],[1,3],[1,4]],columns='a b'.split())
In [4]: df.groupby('a').count()
Out[4]:
a b
a
1 3 3
要复制您看到的内容,请传递 squeeze=True
:
In [5]: df.groupby('a', squeeze=True).count()
Out[5]:
a
1 a 3
b 3
Name: 1, dtype: int64
如果你不能升级那么做:
In [3]: df.groupby('a').count().unstack()
Out[3]:
a b
a
1 3 3
关于python - 为什么只有一个组的数据框分组不返回数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522816/