如何快速高效地计算一亿行表中每行排序元素差的算术、几何和调和平均值?
如果一行的两个元素之间的差为零,则必须将零替换为 1 才能计算平均值。
下面是代码。仅计数有效,ndf['r1']但由于apply. 我不知道如何快速计算几何和调和平均值。
import pandas as pd
import math
lst = [[1,23,45],[20,30,10],[60,15,2]]
df = pd.DataFrame(lst, columns = ['col1', 'col2', 'col3'])
print(df)
ndf = pd.DataFrame()
ndf['r1'] = df.apply(lambda x: pd.Series(list(x.sort_values())),axis=1).diff(axis=1).iloc[:,1:].mean(axis=1)
#ndf['r2'] = (10 ** df.apply(lambda x: x.sort_values(),axis=1).diff(axis=1).iloc[:,1:].applymap(math.log10).sum(axis=1)) ** (1/len(columns))
#ndf['r3'] = len(df.columns)/( (1/df.diff(axis=1).iloc[:,1:]).sum(axis=1) )
print(ndf)
样本数据:
Numpy使用和 的矢量化解决方案SciPy:结果: