質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

877閲覧

2つのdateframeの複数の行を比較して一致する行を取り出す

orange-gummy

総合スコア4

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/07/12 15:16

編集2021/07/13 13:58

前提・実現したいこと

python3.9でpandasを使って生徒の抽選を行うシステムを作っています。生徒の情報と希望を.cvsからdataframeに読み込んで抽選をしています。
実現したいこととしては、複数回抽選を行うのですが、一度当選したことのある人の一覧をデータ(.csv)として保存してその人の当選確率を一定の確率だけ当選したことのない人より下げようとしていることです。
そのために、この2つのdateframeを比較して生徒の情報(3つ)が一致する行のindexを、生徒と情報の希望を読み込んだdateframeからlistへ取り出そうとしています。

扱うデータ

生徒と情報の希望を読み込んだdateframe=df

df

1 student_grade student_class student_number applied_class applied_class2 20 1 A 1 6A 5B 31 1 A 2 5B 5C 42 1 A 3 6C 6A 53 1 A 4 5C 6C 64 1 A 5 6B 5D 75 1 A 6 5B 6A 86 1 A 7 5B 5D 97 1 A 8 5B 6D 108 1 A 9 6D 6B 119 1 A 10 5B 5B 1210 1 A 11 6A 5D 1311 1 A 12 5B 6A 1412 1 A 13 5D 6D 1513 1 A 14 6B 5D 1614 1 A 15 6A 5B 1715 1 A 16 6D 5B 1816 1 A 17 5B 5C 1917 1 A 18 5C 6A 2018 1 A 19 6A 5D 2119 1 A 20 5B 6D 2220 1 A 21 6A 6B 2321 1 A 22 5B 6A 2422 1 A 23 6B 6A 2523 1 A 24 5B 5D 2624 1 A 25 6A 5B 2725 1 A 26 5D 5B 2826 1 A 27 5B 6C 2927 1 A 28 5B 5B 3028 1 A 29 6D 5B 3129 1 A 30 6C 5D 3230 1 A 31 6A 6B 3331 1 A 32 6D 6C 3432 1 A 33 5D 6A 3533 1 A 34 5B 6A 3634 1 A 35 5B 6C 3735 1 A 36 5D 5B 3836 1 A 37 6A 6B 3937 1 A 38 6B 6A 4038 1 A 39 6D 6C 4139 1 A 40 5B 6A

一度当選した人のdateframe=winners

winners

1 student_grade student_class student_number 20 1 A 3 31 1 A 15 42 1 A 26 53 1 A 30 64 1 A 32 75 1 A 33 86 1 A 35 97 1 A 38 108 1 A 39

試したソースコード(途中を抜いています)

python

1same_grade = df[df['student_grade'] == winners['student_grade']] 2same_class = same_grade[same_grade['student_class'] == winners['student_class']] 3same_all = same_class[same_class['student_number'] == winners['student_number']] 4list_of_winners = list(same_all.index)

一致しなければならない3つの要素それぞれについてdfのデータがwinnersにも含まれている行だけを取り出す操作をして、最後にindexをlistに入れようとした

エラー

ValueError: Can only compare identically-labeled Series objects

上記のようなエラーが発生しました

教えてほしいこと

このソースコードではダメな理由と、実現したいことを実現するためにはどのようなコードであれば良いのか教えてください

開発環境

windows10でspyderを使っています

追記

df

1 student_grade student_class student_number applied_class applied_class2 20 1 A 1 6A 5B 31 1 A 2 5B 5C 42 1 A 3 6C 6A 53 1 A 4 5C 6C 64 1 A 5 6B 5D 75 1 A 6 5B 6A 86 1 A 7 5B 5D 97 1 A 8 5B 6D 108 1 A 9 6D 6B 119 1 A 10 5B 5B 1210 1 A 11 6A 5D 1311 1 A 12 5B 6A 1412 1 A 13 5D 6D 1513 1 A 14 6B 5D 1614 1 A 15 6A 5B 1715 1 A 16 6D 5B 1816 1 A 17 5B 5C 1917 1 A 18 5C 6A 2018 1 A 19 6A 5D 2119 1 A 20 5B 6D 2220 1 A 21 6A 6B 2321 1 A 22 5B 6A 2422 1 A 23 6B 6A 2523 1 A 24 5B 5D 2624 1 A 25 6A 5B 2725 1 A 26 5D 5B 2826 1 A 27 5B 6C 2927 1 A 28 5B 5B 3028 1 A 29 6D 5B 3129 1 A 30 6C 5D 3230 1 A 31 6A 6B 3331 1 A 32 6D 6C 3432 1 A 33 5D 6A 3533 1 A 34 5B 6A 3634 1 A 35 5B 6C 3735 1 A 36 5D 5B 3836 1 A 37 6A 6B 3937 1 A 38 6B 6A 4038 1 A 39 6D 6C 4139 1 A 40 5B 6A 4240 1 B 1 6A 5B 4341 1 B 2 5B 5C 4442 1 B 3 6C 6A 4543 1 B 4 5C 6C 4644 1 B 5 6B 5D 4745 1 B 6 5B 6A 4846 1 B 7 5B 5D 4947 1 B 8 5B 6D 5048 1 B 9 6D 6B 5149 1 B 10 5B 5B 5250 1 B 11 6A 5D 5351 1 B 12 5B 6A 5452 1 B 13 5D 6D 5553 1 B 14 6B 5D 5654 1 B 15 6A 5B 5755 1 B 16 6D 5B 5856 1 B 17 5B 5C 5957 1 B 18 5C 6A 6058 1 B 19 6A 5D 6159 1 B 20 5B 6D 6260 1 B 21 6A 6B 6361 1 B 22 5B 6A 6462 1 B 23 6B 6A 6563 1 B 24 5B 5D 6664 1 B 25 6A 5B 6765 1 B 26 5D 5B 6866 1 B 27 5B 6C 6967 1 B 28 5B 5B 7068 1 B 29 6D 5B 7169 1 B 30 6C 5D 7270 1 B 31 6A 6B 7371 1 B 32 6D 6C 7472 1 B 33 5D 6A 7573 1 B 34 5B 6A 7674 1 B 35 5B 6C 7775 1 B 36 5D 5B 7876 1 B 37 6A 6B 7977 1 B 38 6B 6A 8078 1 B 39 6D 6C 8179 1 B 40 5B 6A 8280 1 C 1 6A 5B 8381 1 C 2 5B 5C 8482 1 C 3 6C 6A 8583 1 C 4 5C 6C 8684 1 C 5 6B 5D 8785 1 C 6 5B 6A 8886 1 C 7 5B 5D 8987 1 C 8 5B 6D 9088 1 C 9 6D 6B 9189 1 C 10 5B 5B 9290 1 C 11 6A 5D 9391 1 C 12 5B 6A 9492 1 C 13 5D 6D 9593 1 C 14 6B 5D 9694 1 C 15 6A 5B 9795 1 C 16 6D 5B 9896 1 C 17 5B 5C 9997 1 C 18 5C 6A 10098 1 C 19 6A 5D 10199 1 C 20 5B 6D 102100 1 C 21 6A 6B 103101 1 C 22 5B 6A 104102 1 C 23 6B 6A 105103 1 C 24 5B 5D 106104 1 C 25 6A 5B 107105 1 C 26 5D 5B 108106 1 C 27 5B 6C 109107 1 C 28 5B 5B 110108 1 C 29 6D 5B 111109 1 C 30 6C 5D 112110 1 C 31 6A 6B 113111 1 C 32 6D 6C 114112 1 C 33 5D 6A 115113 1 C 34 5B 6A 116114 1 C 35 5B 6C 117115 1 C 36 5D 5B 118116 1 C 37 6A 6B 119117 1 C 38 6B 6A 120118 1 C 39 6D 6C 121119 1 C 40 5B 6A 122120 1 D 1 6A 5B 123121 1 D 2 5B 5C 124122 1 D 3 6C 6A 125123 1 D 4 5C 6C 126124 1 D 5 6B 5D 127125 1 D 6 5B 6A 128126 1 D 7 5B 5D 129127 1 D 8 5B 6D 130128 1 D 9 6D 6B 131129 1 D 10 5B 5B 132130 1 D 11 6A 5D 133131 1 D 12 5B 6A 134132 1 D 13 5D 6D 135133 1 D 14 6B 5D 136134 1 D 15 6A 5B 137135 1 D 16 6D 5B 138136 1 D 17 5B 5C 139137 1 D 18 5C 6A 140138 1 D 19 6A 5D 141139 1 D 20 5B 6D 142140 1 D 21 6A 6B 143141 1 D 22 5B 6A 144142 1 D 23 6B 6A 145143 1 D 24 5B 5D 146144 1 D 25 6A 5B 147145 1 D 26 5D 5B 148146 1 D 27 5B 6C 149147 1 D 28 5B 5B 150148 1 D 29 6D 5B 151149 1 D 30 6C 5D 152150 1 D 31 6A 6B 153151 1 D 32 6D 6C 154152 1 D 33 5D 6A 155153 1 D 34 5B 6A 156154 1 D 35 5B 6C 157155 1 D 36 5D 5B 158156 1 D 37 6A 6B 159157 1 D 38 6B 6A 160158 1 D 39 6D 6C 161159 1 D 40 5B 6A 162160 2 A 1 6A 5B 163161 2 A 2 5B 5C 164162 2 A 3 6C 6A 165163 2 A 4 5C 6C 166164 2 A 5 6B 5D 167165 2 A 6 5B 6A 168166 2 A 7 5B 5D 169167 2 A 8 5B 6D 170168 2 A 9 6D 6B 171169 2 A 10 5B 5B 172170 2 A 11 6A 5D 173171 2 A 12 5B 6A 174172 2 A 13 5D 6D 175173 2 A 14 6B 5D 176174 2 A 15 6A 5B 177175 2 A 16 6D 5B 178176 2 A 17 5B 5C 179177 2 A 18 5C 6A 180178 2 A 19 6A 5D 181179 2 A 20 5B 6D 182180 2 A 21 6A 6B 183181 2 A 22 5B 6A 184182 2 A 23 6B 6A 185183 2 A 24 5B 5D 186184 2 A 25 6A 5B 187185 2 A 26 5D 5B 188186 2 A 27 5B 6C 189187 2 A 28 5B 5B 190188 2 A 29 6D 5B 191189 2 A 30 6C 5D 192190 2 A 31 6A 6B 193191 2 A 32 6D 6C 194192 2 A 33 5D 6A 195193 2 A 34 5B 6A 196194 2 A 35 5B 6C 197195 2 A 36 5D 5B 198196 2 A 37 6A 6B 199197 2 A 38 6B 6A 200198 2 A 39 6D 6C 201199 2 A 40 5B 6A 202200 2 B 1 6A 5B 203201 2 B 2 5B 5C 204202 2 B 3 6C 6A 205203 2 B 4 5C 6C 206204 2 B 5 6B 5D 207205 2 B 6 5B 6A 208206 2 B 7 5B 5D 209207 2 B 8 5B 6D 210208 2 B 9 6D 6B 211209 2 B 10 5B 5B 212210 2 B 11 6A 5D 213211 2 B 12 5B 6A 214212 2 B 13 5D 6D 215213 2 B 14 6B 5D 216214 2 B 15 6A 5B 217215 2 B 16 6D 5B 218216 2 B 17 5B 5C 219217 2 B 18 5C 6A 220218 2 B 19 6A 5D 221219 2 B 20 5B 6D 222220 2 B 21 6A 6B 223221 2 B 22 5B 6A 224222 2 B 23 6B 6A 225223 2 B 24 5B 5D 226224 2 B 25 6A 5B 227225 2 B 26 5D 5B 228226 2 B 27 5B 6C 229227 2 B 28 5B 5B 230228 2 B 29 6D 5B 231229 2 B 30 6C 5D 232230 2 B 31 6A 6B 233231 2 B 32 6D 6C 234232 2 B 33 5D 6A 235233 2 B 34 5B 6A 236234 2 B 35 5B 6C 237235 2 B 36 5D 5B 238236 2 B 37 6A 6B 239237 2 B 38 6B 6A 240238 2 B 39 6D 6C 241239 2 B 40 5B 6A 242240 2 C 1 6A 5B 243241 2 C 2 5B 5C 244242 2 C 3 6C 6A 245243 2 C 4 5C 6C 246244 2 C 5 6B 5D 247245 2 C 6 5B 6A 248246 2 C 7 5B 5D 249247 2 C 8 5B 6D 250248 2 C 9 6D 6B 251249 2 C 10 5B 5B 252250 2 C 11 6A 5D 253251 2 C 12 5B 6A 254252 2 C 13 5D 6D 255253 2 C 14 6B 5D 256254 2 C 15 6A 5B 257255 2 C 16 6D 5B 258256 2 C 17 5B 5C 259257 2 C 18 5C 6A 260258 2 C 19 6A 5D 261259 2 C 20 5B 6D 262260 2 C 21 6A 6B 263261 2 C 22 5B 6A 264262 2 C 23 6B 6A 265263 2 C 24 5B 5D 266264 2 C 25 6A 5B 267265 2 C 26 5D 5B 268266 2 C 27 5B 6C 269267 2 C 28 5B 5B 270268 2 C 29 6D 5B 271269 2 C 30 6C 5D 272270 2 C 31 6A 6B 273271 2 C 32 6D 6C 274272 2 C 33 5D 6A 275273 2 C 34 5B 6A 276274 2 C 35 5B 6C 277275 2 C 36 5D 5B 278276 2 C 37 6A 6B 279277 2 C 38 6B 6A 280278 2 C 39 6D 6C 281279 2 C 40 5B 6A 282280 2 D 1 6A 5B 283281 2 D 2 5B 5C 284282 2 D 3 6C 6A 285283 2 D 4 5C 6C 286284 2 D 5 6B 5D 287285 2 D 6 5B 6A 288286 2 D 7 5B 5D 289287 2 D 8 5B 6D 290288 2 D 9 6D 6B 291289 2 D 10 5B 5B 292290 2 D 11 6A 5D 293291 2 D 12 5B 6A 294292 2 D 13 5D 6D 295293 2 D 14 6B 5D 296294 2 D 15 6A 5B 297295 2 D 16 6D 5B 298296 2 D 17 5B 5C 299297 2 D 18 5C 6A 300298 2 D 19 6A 5D 301299 2 D 20 5B 6D 302300 2 D 21 6A 6B 303301 2 D 22 5B 6A 304302 2 D 23 6B 6A 305303 2 D 24 5B 5D 306304 2 D 25 6A 5B 307305 2 D 26 5D 5B 308306 2 D 27 5B 6C 309307 2 D 28 5B 5B 310308 2 D 29 6D 5B 311309 2 D 30 6C 5D 312310 2 D 31 6A 6B 313311 2 D 32 6D 6C 314312 2 D 33 5D 6A 315313 2 D 34 5B 6A 316314 2 D 35 5B 6C 317315 2 D 36 5D 5B 318316 2 D 37 6A 6B 319317 2 D 38 6B 6A 320318 2 D 39 6D 6C 321319 2 D 40 5B 6A

winners

1 student_grade student_class student_number 20 1 A 1 31 1 A 3 42 1 A 4 53 1 A 5 64 1 A 7 75 1 A 9 86 1 A 13 97 1 A 14 108 1 A 16 119 1 A 18 1210 1 A 30 1311 1 A 31 1412 1 A 32 1513 1 A 40 1614 1 B 3 1715 1 B 4 1816 1 B 10 1917 1 B 13 2018 1 B 14 2119 1 B 15 2220 1 B 17 2321 1 B 18 2422 1 B 24 2523 1 B 30 2624 1 B 36 2725 1 B 38 2826 1 B 40 2927 1 C 2 3028 1 C 4 3129 1 C 6 3230 1 C 10 3331 1 C 13 3432 1 C 14 3533 1 C 18 3634 1 C 21 3735 1 C 30 3836 1 C 36 3937 1 C 38 4038 1 D 1 4139 1 D 3 4240 1 D 4 4341 1 D 7 4442 1 D 13 4543 1 D 14 4644 1 D 18 4745 1 D 21 4846 1 D 23 4947 1 D 30 5048 1 D 33 5149 1 D 39 5250 2 A 1 5351 2 A 3 5452 2 A 5 5553 2 A 10 5654 2 A 14 5755 2 A 18 5856 2 A 21 5957 2 A 23 6058 2 A 30 6159 2 A 33 6260 2 A 37 6361 2 A 39 6462 2 A 40 6563 2 B 2 6664 2 B 3 6765 2 B 4 6866 2 B 9 6967 2 B 13 7068 2 B 15 7169 2 B 18 7270 2 B 19 7371 2 B 29 7472 2 B 30 7573 2 B 31 7674 2 B 32 7775 2 B 33 7876 2 B 37 7977 2 C 1 8078 2 C 4 8179 2 C 5 8280 2 C 15 8381 2 C 16 8482 2 C 17 8583 2 C 18 8684 2 C 19 8785 2 C 26 8886 2 C 30 8987 2 C 35 9088 2 D 3 9189 2 D 4 9290 2 D 5 9391 2 D 9 9492 2 D 10 9593 2 D 12 9694 2 D 15 9795 2 D 16 9896 2 D 18 9997 2 D 21 10098 2 D 25 10199 2 D 29 102100 2 D 30 103101 2 D 31 104102 2 D 32 105103 2 D 33 106

この二つのデータがそれぞれgrade6まであります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  • エラーの原因

python

1>>> len(df['student_grade']) 240 3>>> len(winners['student_grade']) 49

だからです。
正確には左辺と右辺のindexが正確に同じでないといけません。

  • 実現したいことを実現するためにはどのようなコードであれば良いのか

最終的に何が欲しいのかが正確にはわかりませんが、こういうので良いでしょうか。

python

1>>> list_of_winners = list(df[df['student_number'].apply(lambda x: x in list(pd.merge(df, winners)['student_number']))].index) 2>>> 3>>> print(list_of_winners) 4[2, 14, 25, 29, 31, 32, 34, 37, 38]

投稿2021/07/12 15:47

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

orange-gummy

2021/07/13 10:36 編集

とてもわかりやすい回答ありがとうございます。 追加の質問なのですが、今回質問した比較する二つのdateframeでは'student_grade'と'student_class'がすべて一致していますが、異なる場合にも対応するために、'student_grade','student_class','student_number'の全てが一致している行のindexを得るにはどのようにすれば良いのでしょうか? 教えていただけますと幸いです。
ppaul

2021/07/13 12:11

今回の回答のコードでやってみましたか? コ^ド自体は、そういう制限はないので、そのままで動くと思います。 動かないようなら、どういうデータで問題が起きたかを提示してください。
orange-gummy

2021/07/13 14:03

返信ありがとうございます 回答でいただいたコードを実行したところ、すべての行のindexが出力されてしまいました dfでgrade,class,numberすべてが一致する行がwinnersにある行のindexのlistを得たいです 質問に使ったデータを追記しますので解決方法を教えていただきたいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問