Demean功能不适用于groupby

时间:2013-11-10 02:10:35

标签: python-2.7 pandas

我正在尝试根据Wes McKinney关于熊猫的书来完成并为我的公司制作培训材料,但我感到困惑的是,我无法使demean函数返回预期的输出。

import pandas as pd
import numpy as np

#create some data
people = DataFrame(np.random.RandomState(1000).randn(5, 5,), columns=['a', 'b', 'c', 'd', 'e'], \
               index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'])
# introduce some missing values
people.ix[2:3, ['b', 'c']] = NA

#Group data by passing a Dict
key = {'Jim': 'one', 'Joe' : 'two', 'Steve' : 'one', 'Travis' : 'two', 'Wes' : 'one'}
PGrouped = people.groupby(key)

#define demeaning function
def DeMean(x):
    return x - x.mean()

#Transform data
DeMeaned = PGrouped.transform(DeMean)

#Check that DeMeaned now has zero group means:
DeMeaned.groupby(key).mean()

我无法弄清楚如何在这里粘贴输出,但作为np。种子在数据创建中设置我相信你会得到相同的结果。我期望两个组中的所有列都为0,但是在c和e列中得到0而在其余列中没有。有什么想法吗?

由于

编辑:我在我的函数中放了一些print语句,并将len作为分组函数传递,以查看事情是如何变化的。我也删除了NA值。没运气。事实上,有人可以解释以下内容:

def DoNothing(x):
    print x.name
    print type(x)
    return x

poeple.groupby(len).transform(DoNothing)

函数中的x.name打印状态在调用时生成以下输出:

a, a, b, c, d, e, 3, 5, 6, 

type(x)print语句表示a,a,b,c,d,e是Series对象,而3,5,6是DataFrame对象。

为什么?我认为变换会将每列作为一系列传递给变换函数。尽管奇怪的是'a'似乎传递了两次(或者只是传递了'a' - 我希望所有列都可以传递三次,因为有三个组),它似乎也传递了数据帧对象小组名称

有人能够向我解释实际传递给变换函数的是什么吗?

我很困惑

0 个答案:

没有答案