回答編集履歴

1

2020/08/26 07:04

投稿

kirara0048
kirara0048

スコア1399

test CHANGED
@@ -51,3 +51,77 @@
51
51
  # 2 2 500 600
52
52
 
53
53
  ```
54
+
55
+
56
+
57
+ ---
58
+
59
+
60
+
61
+ なお、`df1`のインデックスが重複している場合や、より高速な処理を求める場合は以下の方法で
62
+
63
+
64
+
65
+ ```python
66
+
67
+ import numpy as np
68
+
69
+
70
+
71
+ df1 = pd.DataFrame({'n': [2, 3, 2],
72
+
73
+ 'a': [100, 300, 500],
74
+
75
+ 'b': [200, 400, 600]},
76
+
77
+ index=[1, 2, 1])
78
+
79
+
80
+
81
+ df1.loc[df1.index.repeat(df1['n'])] # インデックスが重複していると結果が正しくない
82
+
83
+ # n a b
84
+
85
+ # 1 2 100 200
86
+
87
+ # 1 2 500 600
88
+
89
+ # 1 2 100 200
90
+
91
+ # 1 2 500 600
92
+
93
+ # 2 3 300 400
94
+
95
+ # 2 3 300 400
96
+
97
+ # 2 3 300 400
98
+
99
+ # 1 2 100 200
100
+
101
+ # 1 2 500 600
102
+
103
+ # 1 2 100 200
104
+
105
+ # 1 2 500 600
106
+
107
+
108
+
109
+ df1.iloc[np.repeat(np.arange(len(df1)), df1['n'].to_numpy())] # 正しく、かつ高速
110
+
111
+ # n a b
112
+
113
+ # 1 2 100 200
114
+
115
+ # 1 2 100 200
116
+
117
+ # 2 3 300 400
118
+
119
+ # 2 3 300 400
120
+
121
+ # 2 3 300 400
122
+
123
+ # 1 2 500 600
124
+
125
+ # 1 2 500 600
126
+
127
+ ```