質問編集履歴
4
解決方法の追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -70,7 +70,13 @@
|
|
70
70
|
|
71
71
|
|
72
72
|
|
73
|
-
|
73
|
+
### 解決方法
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
df.assign(C=-df.reset_index().groupby('index').apply(lambda sdf: sdf.sort_values('順位')['得点'].diff(-1).sort_index()).to_numpy())
|
78
|
+
|
79
|
+
```
|
74
80
|
|
75
81
|
|
76
82
|
|
3
教えて頂いたコードの実行結果報告のため
test
CHANGED
File without changes
|
test
CHANGED
@@ -217,3 +217,75 @@
|
|
217
217
|
|
218
218
|
|
219
219
|
```
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
### 現在の状況 2
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
C列の計算結果は正しい数値が取得できました。ありがとうございます
|
228
|
+
|
229
|
+
あとは、DataFrameの構造をもとに戻す方法と、やり方が見えてきたので崩さずに追加できないか模索してみます!
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
```
|
234
|
+
|
235
|
+
df2 = df.reset_index()
|
236
|
+
|
237
|
+
df2 = df2.rename(columns={'index':'group'})
|
238
|
+
|
239
|
+
temp_df = df2.set_index(['group', '順位'])
|
240
|
+
|
241
|
+
new_df = temp_df.assign(C=(temp_df.rename(index=lambda s: s-1, level=1) - temp_df)).reset_index()
|
242
|
+
|
243
|
+
new_df.head(20)
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
group 順位 得点 C
|
248
|
+
|
249
|
+
0 201901010101 1.0 1.4 2.1
|
250
|
+
|
251
|
+
1 201901010101 2.0 3.5 6.2
|
252
|
+
|
253
|
+
2 201901010101 6.0 46.6 10.2
|
254
|
+
|
255
|
+
3 201901010101 7.0 56.8 57.9
|
256
|
+
|
257
|
+
4 201901010101 9.0 140.3 NaN
|
258
|
+
|
259
|
+
5 201901010101 3.0 9.7 6.7
|
260
|
+
|
261
|
+
6 201901010101 8.0 114.7 25.6
|
262
|
+
|
263
|
+
7 201901010101 5.0 26.1 20.5
|
264
|
+
|
265
|
+
8 201901010101 4.0 16.4 9.7
|
266
|
+
|
267
|
+
9 201901010102 4.0 4.3 9.6
|
268
|
+
|
269
|
+
10 201901010102 6.0 19.8 7.2
|
270
|
+
|
271
|
+
11 201901010102 5.0 13.9 5.9
|
272
|
+
|
273
|
+
12 201901010102 8.0 27.2 NaN
|
274
|
+
|
275
|
+
13 201901010102 2.0 4.1 0.1
|
276
|
+
|
277
|
+
14 201901010102 7.0 27.0 0.2
|
278
|
+
|
279
|
+
15 201901010102 1.0 2.9 1.2
|
280
|
+
|
281
|
+
16 201901010102 3.0 4.2 0.1
|
282
|
+
|
283
|
+
17 201901010103 3.0 4.5 NaN
|
284
|
+
|
285
|
+
18 201901010103 1.0 3.6 NaN
|
286
|
+
|
287
|
+
19 201901010103 7.0 14.0 NaN
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
```
|
2
誤字
test
CHANGED
File without changes
|
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
df.head(20)
|
102
102
|
|
103
|
-
|
103
|
+
順位 得点
|
104
104
|
|
105
105
|
201901010101 1.0 1.4
|
106
106
|
|
@@ -170,7 +170,7 @@
|
|
170
170
|
|
171
171
|
|
172
172
|
|
173
|
-
|
173
|
+
順位 得点 C
|
174
174
|
|
175
175
|
index
|
176
176
|
|
1
教えて頂いたコードの実行結果の追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -67,3 +67,153 @@
|
|
67
67
|
|
68
68
|
|
69
69
|
一気にできる方法などありましたら、ご教授いただけますでしょうか
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
### 現在の状況 1
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
昨日に頂いたコードを実行しました。
|
82
|
+
|
83
|
+
ありがとうございます。
|
84
|
+
|
85
|
+
目標)
|
86
|
+
|
87
|
+
indexのグループ別に、次の順位の人との得点の差を求めたいです
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
結果)
|
92
|
+
|
93
|
+
順位の最大数がindex別に変わるためだと思いますが、数値がずれるようです
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
```
|
100
|
+
|
101
|
+
df.head(20)
|
102
|
+
|
103
|
+
順位 得点
|
104
|
+
|
105
|
+
201901010101 1.0 1.4
|
106
|
+
|
107
|
+
201901010101 2.0 3.5
|
108
|
+
|
109
|
+
201901010101 6.0 46.6
|
110
|
+
|
111
|
+
201901010101 7.0 56.8
|
112
|
+
|
113
|
+
201901010101 9.0 140.3
|
114
|
+
|
115
|
+
201901010101 3.0 9.7
|
116
|
+
|
117
|
+
201901010101 8.0 114.7
|
118
|
+
|
119
|
+
201901010101 5.0 26.1
|
120
|
+
|
121
|
+
201901010101 4.0 16.4
|
122
|
+
|
123
|
+
201901010102 4.0 4.3
|
124
|
+
|
125
|
+
201901010102 6.0 19.8
|
126
|
+
|
127
|
+
201901010102 5.0 13.9
|
128
|
+
|
129
|
+
201901010102 8.0 27.2
|
130
|
+
|
131
|
+
201901010102 2.0 4.1
|
132
|
+
|
133
|
+
201901010102 7.0 27.0
|
134
|
+
|
135
|
+
201901010102 1.0 2.9
|
136
|
+
|
137
|
+
201901010102 3.0 4.2
|
138
|
+
|
139
|
+
201901010103 3.0 4.5
|
140
|
+
|
141
|
+
201901010103 1.0 3.6
|
142
|
+
|
143
|
+
201901010103 7.0 14.0
|
144
|
+
|
145
|
+
```
|
146
|
+
|
147
|
+
実行と結果になります。
|
148
|
+
|
149
|
+
```
|
150
|
+
|
151
|
+
df2 = df.reset_index()
|
152
|
+
|
153
|
+
df2['C'] = 0
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
for i in range(max(df['順位'].astype(int))):
|
158
|
+
|
159
|
+
df2['shift_index'] = df2['index'].shift(-i-1)
|
160
|
+
|
161
|
+
df2['shift_B'] = df2['得点'].shift(-i-1)
|
162
|
+
|
163
|
+
df2['C'] = df2['C'].mask((df2['順位']==i+1) & (df2['index']==df2['shift_index']), df2['shift_B']-df2['得点'])
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
df3 = df2.drop(['shift_index', 'shift_B'], axis=1).set_index('index')
|
168
|
+
|
169
|
+
df3.head(20)
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
順位 得点 C
|
174
|
+
|
175
|
+
index
|
176
|
+
|
177
|
+
201901010101 1.0 1.4 2.1
|
178
|
+
|
179
|
+
201901010101 2.0 3.5 53.3
|
180
|
+
|
181
|
+
201901010101 6.0 46.6 -30.2
|
182
|
+
|
183
|
+
201901010101 7.0 56.8 0.0
|
184
|
+
|
185
|
+
201901010101 9.0 140.3 0.0
|
186
|
+
|
187
|
+
201901010101 3.0 9.7 6.7
|
188
|
+
|
189
|
+
201901010101 8.0 114.7 0.0
|
190
|
+
|
191
|
+
201901010101 5.0 26.1 0.0
|
192
|
+
|
193
|
+
201901010101 4.0 16.4 0.0
|
194
|
+
|
195
|
+
201901010102 4.0 4.3 -0.2
|
196
|
+
|
197
|
+
201901010102 6.0 19.8 -15.6
|
198
|
+
|
199
|
+
201901010102 5.0 13.9 -9.7
|
200
|
+
|
201
|
+
201901010102 8.0 27.2 0.0
|
202
|
+
|
203
|
+
201901010102 2.0 4.1 -1.2
|
204
|
+
|
205
|
+
201901010102 7.0 27.0 0.0
|
206
|
+
|
207
|
+
201901010102 1.0 2.9 1.3
|
208
|
+
|
209
|
+
201901010102 3.0 4.2 0.0
|
210
|
+
|
211
|
+
201901010103 3.0 4.5 54.6
|
212
|
+
|
213
|
+
201901010103 1.0 3.6 10.4
|
214
|
+
|
215
|
+
201901010103 7.0 14.0 39.3
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
```
|