apply
和applymap,也使用reduce,如下所示: How do I columnwise reduce a pandas dataframe?.但我尝试的只是为每个元素做了 *** 作,而不是整个列. 这不是一个信号处理特定的问题,它只是一个例子,如何对列应用“汇总”(我不知道正确的术语)功能.
我的解决方法是获取原始的numpy.array数据并进行计算.但我很确定有一种pandatic方式来做到这一点(而且是一种更加笨拙的方式).
import pandas as pdimport numpy as npd = 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 da = 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.valuesout = 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 loopIn [33]: %timeit (df.values**2).sum(0)10000 loops,best of 3: 40.2 µs per loopIn [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总结
以上是内存溢出为你收集整理的python – 用pandas计算列的“能量”全部内容,希望文章能够帮你解决python – 用pandas计算列的“能量”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)