如何在pandas panel.apply函数中获取项目名称

时间:2015-12-07 15:07:20

标签: python pandas panel

假设panel1是我拥有的pandas面板,它包含两个数据帧df1和df2,名称为' item1'和' item2'。通过此代码,

panel1.apply(lambda x: func(x) , axis = [1,2])

我可以将每个项目(单个数据帧)作为x传递给func(x),并在函数中执行一些操作。但是,如何知道函数中x的项目名称?例如,代码就像这样

def func(x):
    print x.itemname  #obviously this cannot work. 

我不想像这样使用循环,因为它非常耗时,

for item in panel1.items:
    panel1[item] = 'some calculations'

2 个答案:

答案 0 :(得分:0)

你能迭代一下这个面板的数据帧吗?你说你担心循环的速度,但我不认为它必须很慢。例如,

mypanel = pd.Panel(np.random.randn(2, 5, 4), items=['Item1', 'Item2'],
                  major_axis=pd.date_range('1/1/2000', periods=5),
                  minor_axis=['A', 'B', 'C', 'D'])

def func1(k, x):
    print(k)
    return x.apply(np.log)

mypanel.apply(lambda x: func1('the wrong name', x))  # 1000 loops, best of 3: 1.01 ms per loop
pd.Panel({k: func1(k, v) for k, v in mypanel.iteritems()})  # 1000 loops, best of 3: 800 µs per loop

答案 1 :(得分:0)

如果您使用apply,速度差异很小;您可以随意使用iteritems

如果您使用panel.mean()等矢量化功能,则的速度会有很大差异。但看起来你并没有这样做。