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

回答編集履歴

1

2020/08/26 07:04

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -24,4 +24,41 @@
24
24
  # 1 3 300 400
25
25
  # 2 2 500 600
26
26
  # 2 2 500 600
27
+ ```
28
+
29
+ ---
30
+
31
+ なお、`df1`のインデックスが重複している場合や、より高速な処理を求める場合は以下の方法で
32
+
33
+ ```python
34
+ import numpy as np
35
+
36
+ df1 = pd.DataFrame({'n': [2, 3, 2],
37
+ 'a': [100, 300, 500],
38
+ 'b': [200, 400, 600]},
39
+ index=[1, 2, 1])
40
+
41
+ df1.loc[df1.index.repeat(df1['n'])] # インデックスが重複していると結果が正しくない
42
+ # n a b
43
+ # 1 2 100 200
44
+ # 1 2 500 600
45
+ # 1 2 100 200
46
+ # 1 2 500 600
47
+ # 2 3 300 400
48
+ # 2 3 300 400
49
+ # 2 3 300 400
50
+ # 1 2 100 200
51
+ # 1 2 500 600
52
+ # 1 2 100 200
53
+ # 1 2 500 600
54
+
55
+ df1.iloc[np.repeat(np.arange(len(df1)), df1['n'].to_numpy())] # 正しく、かつ高速
56
+ # n a b
57
+ # 1 2 100 200
58
+ # 1 2 100 200
59
+ # 2 3 300 400
60
+ # 2 3 300 400
61
+ # 2 3 300 400
62
+ # 1 2 500 600
63
+ # 1 2 500 600
27
64
  ```