我正在尝试根据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' - 我希望所有列都可以传递三次,因为有三个组),它似乎也传递了数据帧对象小组名称
有人能够向我解释实际传递给变换函数的是什么吗?
我很困惑