如何有效地将函数应用到Pandas Pan的每个数据帧

2024-10-06 06:58:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个函数应用于Pandas面板中的每个数据帧。我可以写为一个循环,但索引似乎需要很长时间。我希望一个内置的熊猫功能可能会更快。在

我的数据帧看起来像(实际上每列大约50行):

mydata = pd.DataFrame( { 'hits' : [ 123, 456,678 ], 'sqerr' : [ 253, 641, 3480] } )

它们用多索引键排列在一个面板中:

^{pr2}$

面板如下所示:

<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

我有一个函数,它接受一个数据帧并输出一个数字:

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 )

这给出了所需的结果,但是当我分析它时,我的condenser函数只花了4%的时间。大部分时间都花在iteritems和{}所以我想知道是否可以做得更好。在

我查看了mypanel.apply( condenser, axis = 'items' ),但它分别在数据帧的每一列上循环。有什么东西可以对每个数据帧应用一个函数吗?在

另外,我使用的是python2.7.9和pandas 0.15.2


Tags: to数据函数面板pandasdfitemspd
1条回答
网友
1楼 · 发布于 2024-10-06 06:58:43

apply是正确的,但用法是:

在我的面板.apply(冷凝器,轴=[1,2])

这将把一个48 x 2的数据帧传送到冷凝器中。在

相关问题 更多 >