我正在尝试根据 Wes McKinney 关于 pandas 的书为我的公司编写培训材料,但我对我无法让贬低函数返回预期输出的事实感到困惑。
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,而在其余列中则没有。有什么想法吗?
谢谢
编辑:我在我的函数中放了一些打印语句,并将 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) 打印语句表明 a、a、b、c、d、e 是 Series 对象,而 3、5、6 是 DataFrame 对象。
这是为什么?我认为转换会将每一列作为一个系列传递给转换函数。尽管奇怪的是“a”似乎被传递了两次(或者不是只传递了“a”——我希望所有列都被传递三次,因为有三个组),它似乎也传递了具有组名
有谁能够向我解释实际传递给转换函数的内容?
我很混乱