質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

886閲覧

python リストの要素を比較し順番の追加

nabeo2

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/29 07:51

編集2021/12/29 08:06

前提・実現したいこと

現在の出力
'加工順番'::同じ機械ごとに加工順番を上から決めている

['作業者', '機械', '加工順序', '前段取り', '後段取り', '加工時間', '正味前段取り', '正味後段取り', '前段取り_済', '加工_済', '後段取り_済']
[[ 6. 5. 1. 16. 10. 115. 16. 10. 0. 0. 0.]
[ 6. 9. 1. 17. 12. 157. 17. 12. 0. 0. 0.]
[ 4. 10. 1. 11. 7. 134. 11. 7. 0. 0. 0.]
[ 8. 11. 1. 23. 7. 138. 23. 7. 0. 0. 0.]
[ 7. 11. 2. 16. 12. 95. 16. 12. 0. 0. 0.]
[ 2. 12. 1. 12. 13. 107. 12. 13. 0. 0. 0.]
[ 6. 1. 1. 17. 8. 133. 17. 8. 0. 0. 0.]
[ 5. 9. 2. 28. 15. 138. 28. 15. 0. 0. 0.]
[ 2. 7. 1. 12. 7. 57. 12. 7. 0. 0. 0.]
[ 2. 1. 2. 19. 6. 149. 19. 6. 0. 0. 0.]
[ 2. 11. 3. 12. 7. 121. 12. 7. 0. 0. 0.]
[ 1. 7. 2. 30. 7. 115. 30. 7. 0. 0. 0.]
[ 6. 2. 1. 14. 6. 95. 14. 6. 0. 0. 0.]
[ 4. 5. 2. 21. 6. 75. 21. 6. 0. 0. 0.]
[ 7. 1. 3. 25. 14. 63. 25. 14. 0. 0. 0.]
[ 6. 8. 1. 19. 15. 108. 19. 15. 0. 0. 0.]
[ 2. 8. 2. 26. 7. 109. 26. 7. 0. 0. 0.]
[ 3. 2. 2. 22. 6. 159. 22. 6. 0. 0. 0.]
[ 8. 7. 3. 10. 5. 169. 10. 5. 0. 0. 0.]
[ 2. 7. 4. 19. 7. 174. 19. 7. 0. 0. 0.]
[ 2. 5. 3. 17. 10. 87. 17. 10. 0. 0. 0.]
[ 6. 6. 1. 21. 12. 86. 21. 12. 0. 0. 0.]
[ 8. 8. 3. 17. 11. 100. 17. 11. 0. 0. 0.]
[ 2. 5. 4. 24. 10. 117. 24. 10. 0. 0. 0.]
[ 8. 10. 2. 26. 7. 126. 26. 7. 0. 0. 0.]]

実現したい出力
'加工順番'::加工順序を機械ごとに、前段取りの値が小さいものから割り付けたい
(実現したい出力例)
[[ 6. 5. 3. 16. 10. 115. 16. 10. 0. 0. 0.]
[ 6. 9. 1. 17. 12. 157. 17. 12. 0. 0. 0.]
[ 4. 5. 4. 11. 7. 134. 11. 7. 0. 0. 0.]
[ 8. 5. 1. 23. 7. 138. 23. 7. 0. 0. 0.]
[ 7. 2. 1. 16. 12. 95. 16. 12. 0. 0. 0.]
[ 2. 5. 2. 12. 13. 107. 12. 13. 0. 0. 0.]
2番目の要素の同じ値ごとに4番目の要素を比較し小さいものから3番目の要素に順番を付けたい

for i in self.array_machine:
self.order_sample[int(i-1)] += 1
self.order.append(self.order_sample[int(i-1)])

self.array_order = np.array(self.order).reshape(JOB,1)

この部分を変えたい

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python

1import numpy as np 2import pandas as pd 3import random 4import os 5import openpyxl 6from openpyxl.descriptors.base import Length 7 8# 問題の設定 9JOB = 25 # ジョブの個数 10WORKER = 8 # 作業員の人数 11MACHINE = 12 12 13 14# 個体をdataframe型で保存するための項目 15columns = ["作業者","機械","加工順序","前段取り","後段取り","加工時間","正味前段取り","正味後段取り","前段取り_済","加工_済","後段取り_済"] 16 17class Chromosome: 18 def __init__(self): 19 # self.array_presetup_time = np.random.randint(PRESETUP_MIN,PRESETUP_MAX,(JOB,1)) # ジョブごとの前段取り作業時間の生成 20 self.array_presetup_time = np.array([[16],[17],[11],[23],[16],[12],[17],[28],[12],[19],[12],[30],[14],[21],[25],[19],[26],[22],[10],[19],[17],[21],[17],[24],[26]]) 21 # self.array_process_time = np.random.randint(PROCESS_MIN,PROCESS_MAX,(JOB,1)) # ジョブごとの加工時間の生成 22 self.array_process_time = np.array([[115],[157],[134],[138],[95],[107],[133],[138],[57],[149],[121],[115],[95],[75],[63],[108],[109],[159],[169],[174],[87],[86],[100],[117],[126]]) 23 # self.array_postsetup_time = np.random.randint(POSTSETUP_MIN,POSTSETUP_MAX,(JOB,1)) # ジョブごとの後段取り作業時間の生成 24 self.array_postsetup_time = np.array([[10],[12],[7],[7],[12],[13],[8],[15],[7],[6],[7],[7],[6],[6],[14],[15],[7],[6],[5],[7],[10],[12],[11],[10],[7]]) 25 self.array_worker = np.random.randint(1,WORKER+1,(JOB,1)) # ジョブごとの担当作業者の決定 26 self.array_machine = np.random.randint(1,MACHINE+1,(JOB,1)) # ジョブごとの担当機械の決定 27 28 self.order_sample = [0] * MACHINE 29 self.order = [] 30 # 加工順番の決定 31 for i in self.array_machine: 32 self.order_sample[int(i-1)] += 1 33 self.order.append(self.order_sample[int(i-1)]) 34 35 self.array_order = np.array(self.order).reshape(JOB,1) 36 37 # 正味前段取り時間 38 self.list_net_presetup_time = [] 39 self.list_net_postsetup_time = [] 40 for i in range(JOB): 41 self.ability = SKILL_LEVEL[(int(self.array_worker[i])),int(self.array_machine[i])] 42 self.net_presetup_time = self.array_presetup_time[i] * self.ability 43 self.net_postsetup_time = self.array_postsetup_time[i] * self.ability 44 self.list_net_presetup_time.append(self.net_presetup_time) 45 self.list_net_postsetup_time.append(self.net_postsetup_time) 46 self.array_net_presetup_time = np.array(self.list_net_presetup_time).reshape(JOB,1) 47 self.array_net_postsetup_time = np.array(self.list_net_postsetup_time).reshape(JOB,1) 48 49 self.array_binary = np.zeros((JOB,3)) 50 51 # 一つの行列に結合 52 self.gene = np.concatenate([self.array_worker,self.array_machine,self.array_order,self.array_presetup_time, 53 self.array_postsetup_time,self.array_process_time, 54 self.array_net_presetup_time,self.array_net_postsetup_time,self.array_binary],axis = 1) 55 # self.MUTATION_RATE = 0.05 # 突然変異率 56 57 self.df = pd.DataFrame(self.gene,columns = columns)

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Pandas のデータフレームとして取り扱う方が楽なのでそうします。

python

1if __name__ == '__main__': 2 ch = Chromosome() 3 ch.df['加工順序'] = ch.df.groupby('機械')['前段取り'].rank(ascending=False).astype(int) 4 print(ch.df[ch.df.columns[:4]].to_markdown(index=False))
作業者機械加工順序前段取り
65416
69217
410211
811123
711216
212112
61317
59128
27312
21219
211312
17130
62214
45221
71125
68219
28126
32122
87410
27219
25317
66121
88317
25124
810126

出力結果が「実現したい出力」と異なる様なので確認します。

python

1print(ch.df.loc[ch.df['機械']==5, ch.df.columns[:4]]) 2 3 作業者 機械 加工順序 前段取り 40 6 5 4 16 513 4 5 2 21 620 2 5 3 17 723 2 5 1 24

投稿2021/12/29 17:40

編集2021/12/29 18:23
melian

総合スコア19865

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問