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