質問編集履歴

4

変更

2021/10/20 09:57

投稿

yayaya22
yayaya22

スコア51

test CHANGED
File without changes
test CHANGED
@@ -136,14 +136,12 @@
136
136
 
137
137
 
138
138
 
139
- #カンマをリスト変換
140
-
141
139
  df['qty2'] = df['qty2'].astype(str).str.replace(' ', ',')
142
140
 
141
+ df['qty2'] = df['qty2'].str.split(',')
142
+
143
143
  df['qty2'] = df['qty2'].astype(str).str.replace("'", '')
144
144
 
145
-
146
-
147
145
  df = df.explode(['lot','qty2'])
148
146
 
149
147
  print(df)
@@ -182,8 +180,6 @@
182
180
 
183
181
 
184
182
 
185
-
186
-
187
183
  File "C:\Users****\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 8254, in explode
188
184
 
189
185
  raise ValueError("columns must have matching element counts")

3

変更

2021/10/20 09:57

投稿

yayaya22
yayaya22

スコア51

test CHANGED
File without changes
test CHANGED
@@ -112,6 +112,104 @@
112
112
 
113
113
 
114
114
 
115
+ 追記:10/20
116
+
117
+ パターン2で出力ができませんでした。
118
+
119
+
120
+
121
+
122
+
123
+ ```Python
124
+
125
+ #半角をカンマにする
126
+
127
+ df['lot'] = df['lot'].str.replace(' ', ',')
128
+
129
+
130
+
131
+ #カンマをリストに変換
132
+
133
+ df['lot'] = df['lot'].str.split(',')
134
+
135
+ df['lot'] = df['lot'].str.split(',')
136
+
137
+
138
+
139
+ #カンマをリスト変換
140
+
141
+ df['qty2'] = df['qty2'].astype(str).str.replace(' ', ',')
142
+
143
+ df['qty2'] = df['qty2'].astype(str).str.replace("'", '')
144
+
145
+
146
+
147
+ df = df.explode(['lot','qty2'])
148
+
149
+ print(df)
150
+
151
+ 出力結果
152
+
153
+
154
+
155
+ type title order ship qty1 lot qty2 adj Price
156
+
157
+ 0 P001 Z001 1 0 1 [811] [1] NaN
158
+
159
+ 1 P002 Z002 1 0 1 [768] [1] NaN
160
+
161
+ 2 P003 Z003 1 0 1 [063] [1] NaN
162
+
163
+ 3 P004 Z004 6 0 6 [193] [6] NaN
164
+
165
+ 4 P005 Z005 4 0 4 [210] [4] NaN
166
+
167
+ 5 P006   Z006 2 0 2 [385] [2] NaN
168
+
169
+ 6 P007 Z007 2 0 2 [277] [2] NaN
170
+
171
+ 7 P008 Z008 2 0 2 [211] [2] NaN
172
+
173
+ 8 P009 Z009 2 0 2 [295] [2] NaN
174
+
175
+ 9 P010 Z010 2 0 2 [576] [2] NaN
176
+
177
+ 10 P011 Z011 2 0 2 [675] [2] NaN
178
+
179
+ 11 P012 Z012 6 0 6 [796, 310] [5,1] NaN
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ File "C:\Users****\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\frame.py", line 8254, in explode
188
+
189
+ raise ValueError("columns must have matching element counts")
190
+
191
+ ValueError: columns must have matching element counts
192
+
193
+ ```
194
+
195
+ エラーになります。
196
+
197
+ explodeのリストが効いていないようです。
198
+
199
+
200
+
201
+ 最初に頂いたご回答を機能させるためにはどうすればよろしいでしょうか。
202
+
203
+ ちなみに
204
+
205
+ df.explode('lot')
206
+
207
+ は分かれてくれますが、
208
+
209
+ df.explode('qty2')
210
+
211
+ の場合、変化がありません。
212
+
115
213
 
116
214
 
117
215
 

2

細かい文字の変更

2021/10/20 08:16

投稿

yayaya22
yayaya22

スコア51

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  パターン2
44
44
 
45
- shipが総合数になっていて、lotとqtyがテーブル内で同じ枠にある時、
45
+ shipが総合数になっていて、lotとqtyがテーブル内で同じ枠(セル?)にある時、方法を考え
46
46
 
47
47
  explodeメソッドでリストを展開させていたのですが、
48
48
 

1

パターン2の追記

2021/10/19 09:56

投稿

yayaya22
yayaya22

スコア51

test CHANGED
File without changes
test CHANGED
@@ -9,6 +9,12 @@
9
9
  よろしければ教示願います。
10
10
 
11
11
 
12
+
13
+ ※10/19パターン2追記あり
14
+
15
+
16
+
17
+ パターン1(こちらは解決しました)
12
18
 
13
19
  |P001|Z001|568|5
14
20
 
@@ -29,6 +35,80 @@
29
35
  |P001|Z001|568|1
30
36
 
31
37
  |P001|Z001|568|1
38
+
39
+
40
+
41
+
42
+
43
+ パターン2
44
+
45
+ shipが総合数になっていて、lotとqtyがテーブル内で同じ枠にある時、
46
+
47
+ explodeメソッドでリストを展開させていたのですが、
48
+
49
+ ```Python
50
+
51
+ #explodeメソッドでリストを展開させる
52
+
53
+ df = df.explode('lot')
54
+
55
+ ```
56
+
57
+ |type|title|ship|lot|qty
58
+
59
+ |:--|:--:|:--:|--:|
60
+
61
+ |P001|Z001|6|568,555|5,1
62
+
63
+
64
+
65
+
66
+
67
+ |type|title|ship|lot|qty
68
+
69
+ |:--|:--:|:--:|--:|
70
+
71
+ |P001|Z001|6|568|5,1|:--|:--:|:--:|--:|
72
+
73
+ |P001|Z001|6|555|5,1
74
+
75
+
76
+
77
+ これだとlotは分かれますが、qtyが複製されどれを乗算指示すればいいのかが
78
+
79
+ 分かりません。shipを元に判定してもいいですし、
80
+
81
+ 568 を×5
82
+
83
+ 555を×1にしたいです。
84
+
85
+ このとき、type title shipは複製されてかまいません。
86
+
87
+
88
+
89
+ 【理想形です】
90
+
91
+ |type|title|ship|lot|qty
92
+
93
+ |:--|:--:|:--:|--:|
94
+
95
+ |P001|Z001|6|568|1|:--|:--:|:--:|--:|
96
+
97
+ |P001|Z001|6|568|1|:--|:--:|:--:|--:|
98
+
99
+ |P001|Z001|6|568|1|:--|:--:|:--:|--:|
100
+
101
+ |P001|Z001|6|568|1|:--|:--:|:--:|--:|
102
+
103
+ |P001|Z001|6|568|1|:--|:--:|:--:|--:|
104
+
105
+ |P001|Z001|6|555|1
106
+
107
+
108
+
109
+
110
+
111
+ 教示お願い致します。
32
112
 
33
113
 
34
114