2017-01-18 6 views
0

私がやろうとしているのは、行数にかかわらず行ごとにブートストラップ信頼限界を取得し、出力から新しいデータフレームを作成することです。データフレーム全体ですが、行単位ではありません。私は、実際のプログラムを持っているデータは、私は以下の持っているもののようになります。Python Pandas:データフレーム全体ではなく行単位の信頼限界を設定

0 1 2 
0 1 2 3 
1 4 1 4 
2 1 2 3 
3 4 1 4 

私が下限と上限信頼限界で、このような何かを探すために、新たなデータフレームたい:

0 1 
0 1 2 
1 1 5.5 
2 1 4.5 
3 1 4.2 

電流を

 0 1 
0 2.0 2.75 

以下のpython 3コードは、モックデータフレームを生成し、データフレーム全体のブートストラップ信頼限界を生成します。その結果、わずか2つの値、信頼限界の上限と下限、2つの4つのセット(各行に1つ)ではなく、新しいデータフレームです。

import pandas as pd 
import numpy as np 
import scikits.bootstrap as sci 

zz = pd.DataFrame([[[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]], 
       [[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]]]) 
print(zz) 

x= zz.dtypes 
print(x) 

a = pd.DataFrame(np.array(zz.values.tolist())[:, :, 0],zz.index, zz.columns) 
print(a) 
b = sci.ci(a) 
b = pd.DataFrame(b) 
b = b.T 
print(b) 

ありがとうございました。

答えて

0

以下は、私がブートストラップを行ごとに作成するために考えた答えです。

import pandas as pd 
import numpy as np 
import numpy.random as npr 

zz = pd.DataFrame([[[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]], 
        [[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]]]) 

x= zz.dtypes 

a = pd.DataFrame(np.array(zz.values.tolist())[:, :, 0],zz.index, zz.columns) 
print(a) 

def bootstrap(data, num_samples, statistic, alpha): 
    n = len(data) 
    idx = npr.randint(0, n, (num_samples, n)) 
    samples = data[idx] 
    stat = np.sort(statistic(samples, 1)) 
    return (stat[int((alpha/2.0)*num_samples)], 
      stat[int((1-alpha/2.0)*num_samples)]) 

cc = list(a.index.values) # informs generator of the number of rows 

def bootbyrow(cc): 
    for xx in range(1): 
      xx = list(a.index.values) 
      for xx in range(len(cc)): 
       k = a.apply(lambda y: y[xx]) 
       k = k.values 
       for xx in range(1): 
        kk = list(bootstrap(k,10000,np.mean,0.05)) 
        yield list(kk) 


abc = pd.DataFrame(list(bootbyrow(cc))) #bootstrap ci by row 

# the next 4 just show that its working correctly 
a0 = bootstrap((a.loc[0,].values),10000,np.mean,0.05) 
a1 = bootstrap((a.loc[1,].values),10000,np.mean,0.05) 
a2 = bootstrap((a.loc[2,].values),10000,np.mean,0.05) 
a3 = bootstrap((a.loc[3,].values),10000,np.mean,0.05) 

print(abc) 
print(a0) 
print(a1) 
print(a2) 
print(a3) 
1

scikits.bootstrapは、データサンプルが列ではなく行によって並べられていると仮定して動作します。逆の動作をしたい場合は、転置を使用し、列を結合しないstatfunctionを使用してください。

import pandas as pd 
import numpy as np 
import scikits.bootstrap as sci 

zz = pd.DataFrame([[[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]], 
       [[1,2],[2,3],[3,6]],[[4,2],[1,4],[4,6]]]) 
print(zz) 

x= zz.dtypes 
print(x) 

a = pd.DataFrame(np.array(zz.values.tolist())[:, :, 0],zz.index, zz.columns) 
print(a) 
b = sci.ci(a.T, statfunction=lambda x: np.average(x, axis=0)) 
print(b.T) 
関連する問題