teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コピーミスの修正

2020/09/27 02:56

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -28,6 +28,7 @@
28
28
  # ひとりの主担当が1つの担務に2回以上出現したら例外としてストップ
29
29
  assert len(match_tantou1) <= 1 and len(match_tantou2) <= 1
30
30
  # 主担当の担務記録を追加
31
+ matching = [name]
31
32
  matching.extend(match_tantou1)
32
33
  matching.extend(match_tantou2)
33
34
  result_list.append(matching)

2

マッチしなければNaNとなる方が扱いやすいと思いますので修正

2020/09/27 02:56

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -1,38 +1,36 @@
1
1
  とりあえず目的の動作をするコードを作ってみました。もっと洗練された回答があるかもしれませんが。。。
2
2
 
3
3
  ```Python
4
+ import pandas as pd
5
+
4
- # ataFrameは簡略化のため一部のみ作っています
6
+ # DataFrameは簡略化のため一部のみ作っています
5
7
  tantou_df1 = {}
6
8
  tantou_df1['202002020201'] = pd.DataFrame([
7
- [1, '丹内', '高橋'],
9
+ [1, '丹内', '高橋'],
8
- [2, '菱田', '中野'],
10
+ [2, '菱田', '中野'],
9
- [3, '大野', '松下'],
11
+ [3, '大野', '松下'],
10
- [5, '国分恭', '森田']],
12
+ [5, '国分恭', '森田']],
11
- columns=['チーム番号', '主担当', '副担当'])
13
+ columns=['チーム番号', '主担当', '副担当'])
12
14
  tantou_df1['202002020202'] = pd.DataFrame([
13
- [1, '藤岡', '林'],
15
+ [1, '藤岡', '林'],
14
- [2, '秋山', '加藤'],
16
+ [2, '秋山', '加藤'],
15
- [3, '横山', '大竹'],
17
+ [3, '横山', '大竹'],
16
- [10, '国分恭', '森田'],
18
+ [10, '国分恭', '森田'],
17
- [12, '丹内', '相沢']],
19
+ [12, '丹内', '相沢']],
18
- columns=['チーム番号', '主担当', '副担当'])
20
+ columns=['チーム番号', '主担当', '副担当'])
19
21
  matching_list = ['丹内', '武', '国分恭'] # 確認のため、存在しない主担当も入れる
20
22
 
21
23
  result_list = []
22
24
  for name in matching_list:
23
- # それぞれの担務から主担当に一致するチーム番号のリストを抽出する
25
+ # それぞれの担務から主担当に一致するチーム番号のリストを抽出する
24
- match_tantou1 = tantou_df1['202002020201'][tantou_df1['202002020201']['主担当'] == name]['チーム番号'].values
26
+ match_tantou1 = tantou_df1['202002020201'][tantou_df1['202002020201']['主担当'] == name]['チーム番号'].values
25
- match_tantou2 = tantou_df1['202002020202'][tantou_df1['202002020202']['主担当'] == name]['チーム番号'].values
27
+ match_tantou2 = tantou_df1['202002020202'][tantou_df1['202002020202']['主担当'] == name]['チーム番号'].values
26
- # ひとりの主担当が1つの担務に2回以上出現したら例外としてストップ
28
+ # ひとりの主担当が1つの担務に2回以上出現したら例外としてストップ
27
- assert len(match_tantou1) <= 1 and len(match_tantou2) <= 1
29
+ assert len(match_tantou1) <= 1 and len(match_tantou2) <= 1
28
- # ひとりの主担当が両方の担務に出ていなければリストには登録しない
29
- if len(match_tantou1) == 0 and len(match_tantou2) == 0:
30
- continue
31
- # 主担当の担務記録を追加
30
+ # 主担当の担務記録を追加
32
- matching = [name]
33
- matching.extend(match_tantou1)
31
+ matching.extend(match_tantou1)
34
- matching.extend(match_tantou2)
32
+ matching.extend(match_tantou2)
35
- result_list.append(matching)
33
+ result_list.append(matching)
36
34
 
37
35
  # 結果をDataFrameに変換
38
36
  result_df = pd.DataFrame(result_list)
@@ -42,7 +40,8 @@
42
40
  出力結果
43
41
 
44
42
  ```
45
- 0 1 2
43
+ 0 1 2
46
- 0 丹内 1 12
44
+ 0 丹内 1.0 12.0
45
+ 1 武 NaN NaN
47
- 1 国分恭 5 10
46
+ 2 国分恭 5.0 10.0
48
47
  ```

1

質問の修正にあわせました

2020/09/27 02:53

投稿

toast-uz
toast-uz

スコア3266

answer CHANGED
@@ -1,37 +1,37 @@
1
1
  とりあえず目的の動作をするコードを作ってみました。もっと洗練された回答があるかもしれませんが。。。
2
2
 
3
3
  ```Python
4
- # レースのDataFrameは簡略化のため一部のみ作っています
4
+ # ataFrameは簡略化のため一部のみ作っています
5
- race_df1 = {}
5
+ tantou_df1 = {}
6
- race_df1['202002020201'] = pd.DataFrame([
6
+ tantou_df1['202002020201'] = pd.DataFrame([
7
- [1, '丹内', '高橋'],
7
+ [1, '丹内', '高橋'],
8
8
  [2, '菱田', '中野'],
9
9
  [3, '大野', '松下'],
10
10
  [5, '国分恭', '森田']],
11
- columns=['番', '騎手', '厩舎'])
11
+ columns=['チーム', '主担当', '副担当'])
12
- race_df1['202002020202'] = pd.DataFrame([
12
+ tantou_df1['202002020202'] = pd.DataFrame([
13
- [1, '藤岡', '林'],
13
+ [1, '藤岡', '林'],
14
- [2, '秋山', '加藤'],
14
+ [2, '秋山', '加藤'],
15
- [3, '横山', '大竹'],
15
+ [3, '横山', '大竹'],
16
16
  [10, '国分恭', '森田'],
17
17
  [12, '丹内', '相沢']],
18
- columns=['番', '騎手', '厩舎'])
18
+ columns=['チーム', '主担当', '副担当'])
19
- matching_list = ['丹内', '武', '国分恭'] # 確認のため、存在しない騎手も入れる
19
+ matching_list = ['丹内', '武', '国分恭'] # 確認のため、存在しない主担当も入れる
20
20
 
21
21
  result_list = []
22
22
  for name in matching_list:
23
- # それぞれのレースから騎手に一致する番のリストを抽出する
23
+ # それぞれの担務から主担当に一致するチームのリストを抽出する
24
- match_race1 = race_df1['202002020201'][race_df1['202002020201']['騎手'] == name]['番'].values
24
+ match_tantou1 = tantou_df1['202002020201'][tantou_df1['202002020201']['主担当'] == name]['チーム'].values
25
- match_race2 = race_df1['202002020202'][race_df1['202002020202']['騎手'] == name]['番'].values
25
+ match_tantou2 = tantou_df1['202002020202'][tantou_df1['202002020202']['主担当'] == name]['チーム'].values
26
- # ひとりの騎手が1つのレースに2回以上出現したら例外としてストップ
26
+ # ひとりの主担当が1つの担務に2回以上出現したら例外としてストップ
27
- assert len(match_race1) <= 1 and len(match_race2) <= 1
27
+ assert len(match_tantou1) <= 1 and len(match_tantou2) <= 1
28
- # ひとりの騎手が両方のレースに出ていなければリストには登録しない
28
+ # ひとりの主担当が両方の担務に出ていなければリストには登録しない
29
- if len(match_race1) == 0 and len(match_race2) == 0:
29
+ if len(match_tantou1) == 0 and len(match_tantou2) == 0:
30
30
  continue
31
- # 騎手出場記録を追加
31
+ # 主担当担務記録を追加
32
32
  matching = [name]
33
- matching.extend(match_race1)
33
+ matching.extend(match_tantou1)
34
- matching.extend(match_race2)
34
+ matching.extend(match_tantou2)
35
35
  result_list.append(matching)
36
36
 
37
37
  # 結果をDataFrameに変換