我正在阅读'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.15.0'重现你的例子。我从书中得到结果,但是在'b'列中将所有值设置为'4'。 这个例子不违反转换函数的合约吗?文档状态:'因此,传递的转换函数应返回与组块大小相同的结果。' – cel 2014-10-26 15:20:34
如果我的原型示例不正确,则添加了实际示例。谢谢。我也会更新我的熊猫,看看是否有帮助。 – 2014-10-26 15:38:19
这是一个仅在0.14.1出现的错误(之前和之后都是正确的) – Jeff 2014-10-26 16:40:27