2014-10-26 30 views
1

我正在阅读'Python for Data Analysis'一书,我正在通过一个例子来研究下面的原型。意想不到的行为熊猫groupby转换

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame({'a' : [1,2, 3], 'b' : [3,4,6]}, index=['AA', 'BB', 'CC']) 

In [313]: df1 
Out[313]: 
    a b 
AA 1 3 
BB 2 4 
CC 3 6 

In [314]: df1.groupby(['one', 'two', 'one']).mean() 
Out[314]: 
    a b 
one 2 4.5 
two 2 4.0 

现在,当我在DataFrame使用transform(np.mean),我得到:

In [315]: df1.groupby(['one', 'two', 'one']).transform(np.mean) 
Out[315]: 
     a b 
AA NaN NaN 
BB NaN NaN 
CC NaN NaN 
one 2 4.5 
two 2 4.0 

的立足之本和文件,我应该得到

 a b 
AA 2 4.5 
BB 2 4.0 
CC 2 4.5 

有人可以解释我是做错事,或者行为发生变化pandas transform

对于谁拥有书的人参考,类似的例子是第265页,Python的数据分析”(http://www.amazon.com/Python-Data-Analysis-Wrangling-IPython/dp/1449319793/ref=sr_1_1?ie=UTF8&qid=1414333292&sr=8-1&keywords=python+for+data+analysis

编辑:

这是本书的实际例子。

people = pd.DataFrame(np.random.randn(5,5), columns=list('abcde'), index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis']) 

people.ix[2:3, ['b', 'c']] = np.nan 

key = ['one', 'two', 'one', 'two', 'one'] 

people.groupby(key).transform(np.mean) 

这应该在一个数据帧与index = ['Joe', 'Steve', 'Wes', 'Jim', 'Travis']columns = list("abcde")

,而不是我得到显示由关键平均值。

   a   b   c   d   e 
Jim   NaN  NaN  NaN  NaN  NaN 
Joe   NaN  NaN  NaN  NaN  NaN 
Steve  NaN  NaN  NaN  NaN  NaN 
Travis  NaN  NaN  NaN  NaN  NaN 
Wes   NaN  NaN  NaN  NaN  NaN 
one  0.115921 0.269327 -0.812230 0.901449 0.100471 
two -1.371846 -0.918605 -0.391085 -0.425853 0.436742 

我实际上使用熊猫版本0.14.1。

+0

我不能用熊猫'0.15.0'重现你的例子。我从书中得到结果,但是在'b'列中将所有值设置为'4'。 这个例子不违反转换函数的合约吗?文档状态:'因此,传递的转换函数应返回与组块大小相同的结果。' – cel 2014-10-26 15:20:34

+0

如果我的原型示例不正确,则添加了实际示例。谢谢。我也会更新我的熊猫,看看是否有帮助。 – 2014-10-26 15:38:19

+1

这是一个仅在0.14.1出现的错误(之前和之后都是正确的) – Jeff 2014-10-26 16:40:27

回答

0

更新我的熊猫版本修复了这个问题。这可能是以前版本中的一个错误。但不确定。