0

我正在尝试根据 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”——我希望所有列都被传递三次,因为有三个组),它似乎也传递了具有组名

有谁能够向我解释实际传递给转换函数的内容?

我很混乱

4

0 回答 0