我想以向量化的方式计算熊猫DataFrame每行中唯一浮点值的均值(即numpy.mean)和sem(即scipy.stats.sem)。

输入示例:

import pandas as pd
t = pd.DataFrame(data={'c1':[1.,2.,3.,4.],
                       'c2':[1.,2.,3.,3.],
                       'c3':[1.,2.,2.,2.],
                       'c4':[1.,1.,1.,1.]})
t.index.name = 'i'
# unique values: [1] [1,2] [1,2,3] [1,2,3,4]


预期结果:

   mean       sem
i
0   1.0       NaN
1   1.5  0.500000
2   2.0  0.577350
3   2.5  0.645497


请不要提交像这样的非矢量化解决方案:

import numpy as np, scipy.stats as ss
def fun(x):
    r = x.transpose()[x.index[0]].value_counts(sort=False).rename('count')
    r.index.name = 'value'
    y = r.index.values
    return pd.DataFrame({'mean':np.mean(y), 'sem':ss.sem(y)}, index=[0])

t2 = t.groupby(t.index.names).apply(fun)
t2.index = t2.index.droplevel(1)


实际的DataFrame具有> 1e12行,因此没有有效的解决方案。

理想情况下,具有唯一性(即绝对值与绝对值之差或偏差)的浮点条件会很棒,但是任何有效的解决方案都很棒。

谢谢您的帮助!

最佳答案

IIUC,pandas具有sem,您无需调用scipy

newdf=pd.DataFrame(list(map(set,t.values)))
newdf.T.agg(['mean','sem']).T
Out[436]:
   mean       sem
0   1.0       NaN
1   1.5  0.500000
2   2.0  0.577350
3   2.5  0.645497

关于python - Pandas DataFrame每行中唯一浮点值的均值和sem的矢量化计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51994045/

10-09 17:13