将函数应用于pandas数据帧并获得不同大小的ndarray输出

时间:2016-10-13 17:41:18

标签: python python-3.x pandas scipy

我的目标是获取数据帧的本地最大高度的索引。这些在每列3到5之间变化。

我尝试过使用apply函数,但收到错误Shape of passed values is (736, 4), indices imply (736, 480)could not broadcast input array from shape (0) into shape (1)

我的矩阵是480x736

以下是我为apply函数编写的内容:

import numpy as np
import peakutils
df.apply(lambda x: peakutils.indexes(x, thres=0.02/max(x), min_dist=100))

以下是我能够开展的工作:

indexes =[]
import numpy as np
import peakutils
for column in df:
    indexes.append(peakutils.indexes(df[column], thres=0.02/max(df[column]), min_dist=100))

索引通常是4个长度,但偶尔我会得到1个或更少:

Out[32]: 
[array([ 12, 114, 217, 328, 433]),
 array([ 12, 116, 217, 325, 433]),
 array([ 64, 166, 283, 389]),
 array([105, 217, 326, 433]),
 array([105, 237, 390])]

我的猜测是输出的问题来自于我不知道结果数据帧的形状。形状从一开始就是不确定的。

如何将函数应用于输出大小不同的df&键入吗

1 个答案:

答案 0 :(得分:2)

大熊猫正在努力做一些事情"与数组。你可以短路“#34;某事"将lambda的返回值包含在pd.Series

试试这个:

df.apply(lambda x: pd.Series(peakutils.indexes(x, thres=0.02/max(x), min_dist=100)))