我想以向量化的方式计算熊猫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/