假设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'
答案 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()
等矢量化功能,则的速度会有很大差异。但看起来你并没有这样做。