我在具有混合类型(数字和对象)的DataFrame上使用Pandas groupby函数。
>>> import pandas as pd
>>>
>>> d = {
... "sales": {
... "0": 3963.0,
... "1": 2312.7,
... },
... "Id": {
... "0": 10001,
... "1": 10003,
... },
... "Blah": {
... "0": "Blah1",
... "1": "Blah2",
... }
... }
>>>
>>> d=pd.DataFrame(d)
>>>
>>> print d.dtypes
Blah object
Id int64
sales float64
dtype: object
当我将数字函数应用于组时,例如max()或mean(),我得到一个返回类型object
的DataFrame
>>> print d.groupby('Id').max()['sales']
Id
10001 3963.0
10003 2312.7
Name: sales, dtype: object
当我首先只选择数字列然后将数字函数应用于组时,例如max()或mean(),我得到一个数字类型的DataFrame
>>> print d[['sales','Id']].groupby('Id').max()['sales']
Id
10001 3963.0
10003 2312.7
Name: sales, dtype: float64
第二个结果是我所期望的 - 或者我不明白为什么将数字函数max
或mean
应用于具有非数字类型的数据框会强制数值到对象。
例如,如果原始数据框中没有非数字对象类型,则不会以奇怪的方式强制执行类型:
>>> del d['Blah']
>>> d[['Id','sales']].groupby('Id').max()['sales']
Id
10001 3963.0
10003 2312.7
Name: sales, dtype: float64
>>> d.groupby('Id').max()['sales']
Id
10001 3963.0
10003 2312.7
Name: sales, dtype: float64
>>>
编辑 - 这是我的版本信息:
Mac OS X 10.9 w/ Python 2.7.6
Cython==0.19.2
matplotlib==1.3.1
numpy==1.8.0
pandas==0.13.1
scipy==0.13.0
答案 0 :(得分:2)
不要记得这个问题是什么时候修复的,但在master / 0.14(即将推出)中是正确的。
In [48]: d
Out[48]:
Blah Id sales
0 Blah1 10001 3963.0
1 Blah2 10003 2312.7
[2 rows x 3 columns]
In [49]: d.dtypes
Out[49]:
Blah object
Id int64
sales float64
dtype: object
In [50]: d.groupby('Id').max()['sales']
Out[50]:
Id
10001 3963.0
10003 2312.7
Name: sales, dtype: float64