##解決したいこと
下記コードを実行するとdataframeの各行に0,1のクラスが与えられます。(図1参照)
得られたクラス分けをもとに0あるいは1が連続している箇所を一つのブロックとして抜き出し、ブロック内の各値の平均を算出、これをdataframe全体に行い結果をdataframeに保存したいです。結果を保存する際はクラスごとのdataframeを作成せず、同一のものに保存し、図1のように属するクラスを確認できるようにしたいです。
python
1def calc_minus(n): 2 return n * -1 3 4place = '/hogehoge.xlsx' 5wb = openpyxl.load_workbook(place) 6ws = wb["Sheet1"] 7 8#Vzを取得 9Vz = [] 10for row in ws.iter_rows(min_row=1,min_col=1,max_col=1): 11 if all(is_empty(c) for c in row): 12 break 13 for col in row: 14 Vz.append(col.value) 15 16#Vxを取得 17Vx = [] 18for row in ws.iter_rows(min_row=1,min_col=2,max_col=2): 19 if all(is_empty(c) for c in row): 20 break 21 for col in row: 22 Vx.append(col.value) 23Vx_alt =list(map(calc_minus,Vx)) 24 25#Vyを取得 26Vy = [] 27for row in ws.iter_rows(min_row=1,min_col=3,max_col=3): 28 if all(is_empty(c) for c in row): 29 break 30 for col in row: 31 Vy.append(col.value) 32 33#gmmで分類 34gmm = GaussianMixture(n_components=2,covariance_type='full' 35 ).fit(np.array(Vx_alt).reshape(-1,1)) 36 37#dataframeを作成 38results = gmm.predict(np.array(Vx_alt).reshape(-1,1)) 39results_list = results.tolist() 40 41results_array = pd.DataFrame(np.array(Vx_alt).reshape(-1,1),columns=['Vx']) 42results_array['Vy']=Vy 43results_array['Vz']=Vz 44results_array['class']=results
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/16 03:01