python – 用pandas计算列的“能量”
发布时间:2020-12-20 11:58:02 所属栏目:Python 来源:网络整理
导读:我尝试计算我的pandas.DataFrame在此 formula for discrete-time signal之后的信号能量.我尝试使用 apply 和applymap,也使用reduce,如下所示: How do I columnwise reduce a pandas dataframe?.但我尝试的只是为每个元素做了操作,而不是整个列. 这不是一个
我尝试计算我的pandas.DataFrame在此
formula for discrete-time signal之后的信号能量.我尝试使用
apply 和applymap,也使用reduce,如下所示:
How do I columnwise reduce a pandas dataframe?.但我尝试的只是为每个元素做了操作,而不是整个列.
这不是一个信号处理特定的问题,它只是一个例子,如何对列应用“汇总”(我不知道正确的术语)功能. 我的解决方法是获取原始的numpy.array数据并进行计算.但我很确定有一种pandatic方式来做到这一点(而且是一种更加笨拙的方式). import pandas as pd import numpy as np d = np.array([[2,2,2],[0,-1,-3,4,-5,6,-7,8,-9],1,-2,3,-4,5,-6,7,-8,9]]).transpose() df = pd.DataFrame(d) energies = [] # a same as d a = df.as_matrix() assert(np.array_equal(a,d)) for column in range(a.shape[1]): energies.append(sum(a[:,column] ** 2)) print(energies) # [40,285,285] 提前致谢! 解决方法
您可以为数据框输出执行以下操作 –
(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,a) ...: In [35]: %timeit einsum_based(a) 10000 loops,best of 3: 32.2 μs per loop (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |