Python 计算;能源";熊猫柱

Python 计算;能源";熊猫柱,python,pandas,numpy,Python,Pandas,Numpy,我试图计算我的熊猫的信号能量。我尝试了和applymap,也尝试了reduce,如下所示:。但我所做的只是对每个元素进行操作,而不是对整个列进行操作 这不是一个特定于信号处理的问题,它只是一个如何将“summary”(我不知道这个词的正确名称)函数应用于列的示例 我的解决方法是获取原始numpy.array数据并进行计算。但我很确定有一种潘多蒂式的方法可以做到这一点(当然还有一种更为自然的方法) 提前谢谢 您可以对数据帧输出执行以下操作- (df**2).sum(axis=0) # Or (df

我试图计算我的
熊猫的信号能量。我尝试了和
applymap
,也尝试了reduce,如下所示:。但我所做的只是对每个元素进行操作,而不是对整个列进行操作

这不是一个特定于信号处理的问题,它只是一个如何将“summary”(我不知道这个词的正确名称)函数应用于列的示例

我的解决方法是获取原始
numpy.array
数据并进行计算。但我很确定有一种潘多蒂式的方法可以做到这一点(当然还有一种更为自然的方法)


提前谢谢

您可以对数据帧输出执行以下操作-

(df**2).sum(axis=0) # Or (df**2).sum(0)
为了提高性能,我们可以使用从数据帧中提取的数组-

(df.values**2).sum(axis=0) # Or (df.values**2).sum(0)
为了进一步提高性能,还有
np.einsum
-

a = df.values
out = np.einsum('ij,ij->j',a,a)
运行时测试-

In [31]: df = pd.DataFrame(np.random.randint(0,9,(1000,30)))

In [32]: %timeit (df**2).sum(0)
1000 loops, best of 3: 518 µs per loop

In [33]: %timeit (df.values**2).sum(0)
10000 loops, best of 3: 40.2 µs per loop

In [34]: def einsum_based(a):
    ...:     a = df.values
    ...:     return np.einsum('ij,ij->j',a,a)
    ...: 

In [35]: %timeit einsum_based(a)
10000 loops, best of 3: 32.2 µs per loop

有一个属性
df.var()
,它返回列的方差。这是能量(取决于定义,您可能需要将其乘以元素数
df.var()*df.shape[0]
)。

您可以使用:


真的,就这样?看起来很简单,我现在有点傻了:)谢谢
einsum
是给书呆子的,不是吗?但这仍然是一件很酷的事情。@ppasler是的,那些在最后形成俱乐部的,而不是音乐俱乐部;)意想不到的是,
numpy
pandas
快10倍多。可能是
C
实现吗?@ppasler不是pandas方面的专家,因此不能权威地对此发表评论,但与基于pandas的一些问题的dataframe数据相比,使用数组的工作性能更高,我可以使用NumPy方法使用底层数组数据来回答这些问题。谢谢,这与我的公式给出的结果相当相同。由于我想知道一般情况下如何实现这些功能,这只适用于我的特殊情况。
In [31]: df = pd.DataFrame(np.random.randint(0,9,(1000,30)))

In [32]: %timeit (df**2).sum(0)
1000 loops, best of 3: 518 µs per loop

In [33]: %timeit (df.values**2).sum(0)
10000 loops, best of 3: 40.2 µs per loop

In [34]: def einsum_based(a):
    ...:     a = df.values
    ...:     return np.einsum('ij,ij->j',a,a)
    ...: 

In [35]: %timeit einsum_based(a)
10000 loops, best of 3: 32.2 µs per loop
print (df.pow(2).sum())
0     40
1    285
2    285
dtype: int64

print (df.pow(2).sum().values.tolist())
[40, 285, 285]