回答編集履歴
1
修正後のデータに対応
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
`pivot`でcol2とcol4をまとめて表にしてしまい、col4の2列を削除してから、列名を付け直せばいいのでは。
|
1
|
+
`pivot`でcol2とcol4以降をまとめて表にしてしまい、col4以降の不要な2列を削除してから、列名を付け直せばいいのでは。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -12,31 +12,29 @@
|
|
12
12
|
|
13
13
|
txt = """
|
14
14
|
|
15
|
-
col1 col2 col3 col4
|
15
|
+
col1 col2 col3 col4 col5 col6
|
16
16
|
|
17
|
-
A 1 0900 100
|
17
|
+
A 1 0900 100 200 300
|
18
18
|
|
19
|
-
A 2 0920 100
|
19
|
+
A 2 0920 100 200 300
|
20
20
|
|
21
|
-
A 3 0930 100
|
21
|
+
A 3 0930 100 200 300
|
22
22
|
|
23
|
-
B 11 0900 200
|
23
|
+
B 11 0900 200 300 400
|
24
24
|
|
25
|
-
B 12 0920 200
|
25
|
+
B 12 0920 200 300 400
|
26
26
|
|
27
|
-
B 13 0930 200
|
27
|
+
B 13 0930 200 300 400
|
28
28
|
|
29
|
-
C 21 0900 300
|
29
|
+
C 21 0900 300 400 500
|
30
30
|
|
31
|
-
C 22 0920 300
|
31
|
+
C 22 0920 300 400 500
|
32
32
|
|
33
|
-
C 23 0930 300
|
33
|
+
C 23 0930 300 400 500
|
34
34
|
|
35
35
|
"""
|
36
36
|
|
37
37
|
|
38
|
-
|
39
|
-
# 元のデータフレームを再現
|
40
38
|
|
41
39
|
df = pd.read_csv(io.StringIO(txt), delim_whitespace=True)
|
42
40
|
|
@@ -44,19 +42,15 @@
|
|
44
42
|
|
45
43
|
|
46
44
|
|
47
|
-
# col2とcol4をvaluesに指定(したのと同じ結果)
|
48
|
-
|
49
45
|
dfp = df.pivot(index=['col1'], columns=['col3'])
|
50
46
|
|
51
47
|
print(dfp, end='\n\n')
|
52
48
|
|
53
49
|
|
54
50
|
|
55
|
-
|
51
|
+
dfp.drop(dfp.columns[[i for i in range(4, len(dfp.columns)) if i % 3 != 0]], axis=1, inplace=True)
|
56
52
|
|
57
|
-
dfp.drop(dfp.columns[[4, 5]], axis=1, inplace=True)
|
58
|
-
|
59
|
-
dfp.columns = [
|
53
|
+
dfp.columns = [t[1] if i < 3 else t[0] for i, t in enumerate(dfp.columns)]
|
60
54
|
|
61
55
|
dfp.index.name = None
|
62
56
|
|
@@ -68,48 +62,48 @@
|
|
68
62
|
|
69
63
|
```result
|
70
64
|
|
71
|
-
col1 col2 col3 col4
|
65
|
+
col1 col2 col3 col4 col5 col6
|
72
66
|
|
73
|
-
0 A 1 900 100
|
67
|
+
0 A 1 900 100 200 300
|
74
68
|
|
75
|
-
1 A 2 920 100
|
69
|
+
1 A 2 920 100 200 300
|
76
70
|
|
77
|
-
2 A 3 930 100
|
71
|
+
2 A 3 930 100 200 300
|
78
72
|
|
79
|
-
3 B 11 900 200
|
73
|
+
3 B 11 900 200 300 400
|
80
74
|
|
81
|
-
4 B 12 920 200
|
75
|
+
4 B 12 920 200 300 400
|
82
76
|
|
83
|
-
5 B 13 930 200
|
77
|
+
5 B 13 930 200 300 400
|
84
78
|
|
85
|
-
6 C 21 900 300
|
79
|
+
6 C 21 900 300 400 500
|
86
80
|
|
87
|
-
7 C 22 920 300
|
81
|
+
7 C 22 920 300 400 500
|
88
82
|
|
89
|
-
8 C 23 930 300
|
83
|
+
8 C 23 930 300 400 500
|
90
84
|
|
91
85
|
|
92
86
|
|
93
|
-
col2 col4
|
87
|
+
col2 col4 col5 col6
|
94
88
|
|
95
|
-
col3 900 920 930 900 920 930
|
89
|
+
col3 900 920 930 900 920 930 900 920 930 900 920 930
|
96
90
|
|
97
91
|
col1
|
98
92
|
|
99
|
-
A 1 2 3 100 100 100
|
93
|
+
A 1 2 3 100 100 100 200 200 200 300 300 300
|
100
94
|
|
101
|
-
B 11 12 13 200 200 200
|
95
|
+
B 11 12 13 200 200 200 300 300 300 400 400 400
|
102
96
|
|
103
|
-
C 21 22 23 300 300 300
|
97
|
+
C 21 22 23 300 300 300 400 400 400 500 500 500
|
104
98
|
|
105
99
|
|
106
100
|
|
107
|
-
900 920 930 col4
|
101
|
+
900 920 930 col4 col5 col6
|
108
102
|
|
109
|
-
A 1 2 3 100
|
103
|
+
A 1 2 3 100 200 300
|
110
104
|
|
111
|
-
B 11 12 13 200
|
105
|
+
B 11 12 13 200 300 400
|
112
106
|
|
113
|
-
C 21 22 23 300
|
107
|
+
C 21 22 23 300 400 500
|
114
108
|
|
115
109
|
```
|