我正在尝试将函数应用于Pandas面板中的每个DataFrame。我可以将其编写为循环,但是索引似乎要花很长时间。我希望内置的Pandas功能可能更快。
我有看起来像的数据帧(实际上每列大约50行):
mydata = pd.DataFrame( { 'hits' : [ 123, 456,678 ], 'sqerr' : [ 253, 641, 3480] } )
它们被安排在带有多索引键的面板中:
mydict = { (0, 20 ) : mydata, (30, 40 ) : moredata }
mypanel = pd.Panel( mydict )
该面板如下所示:
<class 'pandas.core.panel.Panel'>
Dimensions: 1600 (items) x 48 (major_axis) x 2 (minor_axis)
Items axis: (-4000, -4000) to (3800, 3800)
Major_axis axis: 0 to 47
Minor_axis axis: hits to sqerr
我有一个函数,它需要一个DataFrame并输出一个数字:
def condenser( df ):
return some_stuff( df['hits'], df['sqerr'] )
我想将我的面板缩小为一个系列,以我的多重索引为索引,并以冷凝器功能的结果为其值。
我可以:
intermediate = []
for k, df in mypanel.iteritems():
intermediate.append( condenser( df ) )
result = pd.Series( results, index = pypanel.items )
这给出了所需的结果,但是当我分析它时,只有4%的时间花费在我的condenser
函数上。大部分时间都花在了上面iteritems
,__getitem__
所以我想知道是否可以做得更好。
我查看了一下,mypanel.apply( condenser, axis = 'items' )
但这分别遍历了DataFrames的每一列。是否有一些功能可以应用于每个DataFrame?
ps我正在使用Python 2.7.9和pandas 0.15.2
apply是正确的,但是用法是:
mypanel.apply(冷凝器,轴= [1,2])
这会将48 x 2 DataFrame传递到冷凝器中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句