簡體   English   中英

如何使用 pandas 按行和列組織 dataframe?

[英]How do I use pandas to organize dataframe by both row and column?

我正在學習 python 和 pandas,並且我知道如何進行 groupby() 和 sum() 之類的基本操作。 但我正在嘗試做更復雜的操作,比如使用行和列進行分類,但我不確定如何開始下面的問題。

這是來自 GitHub 的數據集: https://github.com/KeithGalli/pandas/blob/master/pokemon_data.csv

這是我要制作的內容:

一代 消防調幅 消防新西蘭 水 AM 新西蘭水 草上午 草新西蘭
1 #口袋妖怪
2
3
4
5
6

這是我的方法:

df = pd.read_csv(pokemon_data.csv, header=0)

fire = df.loc[df['Type 1'] == 'Fire']
water = df.loc[df['Type 1'] == 'Water']
grass = df.loc[df['Type 1'] == 'Grass']

# Trim down columns to only related data
fire = fire[['Name', 'Type 1', 'Generation']]
water = water[['Name', 'Type 1', 'Generation']]
grass = grass[['Name', 'Type 1', 'Generation']]

下一步:我應該先按 Generation 排序,還是按字母范圍(AM 和 NZ)排序? 我無法解決這個問題。

非常感謝您對您的工作的解釋。 謝謝!

通過比較列Name的第一個字母,然后使用DataFrame.pivot_table為最終 DataFrame 中的新列創建幫助器列,如果需要在Name中聚合字符串需要聚合join

df['cat'] = df['Type 1'] + ' ' + np.where(df['Name'].str[0].gt('M'), 'N-Z','A-M')
print (df)
       #                   Name   Type 1  Type 2  HP  Attack  Defense  \
0      1              Bulbasaur    Grass  Poison  45      49       49   
1      2                Ivysaur    Grass  Poison  60      62       63   
2      3               Venusaur    Grass  Poison  80      82       83   
3      3  VenusaurMega Venusaur    Grass  Poison  80     100      123   
4      4             Charmander     Fire     NaN  39      52       43   
..   ...                    ...      ...     ...  ..     ...      ...   
795  719                Diancie     Rock   Fairy  50     100      150   
796  719    DiancieMega Diancie     Rock   Fairy  50     160      110   
797  720    HoopaHoopa Confined  Psychic   Ghost  80     110       60   
798  720     HoopaHoopa Unbound  Psychic    Dark  80     160       60   
799  721              Volcanion     Fire   Water  80     110      120   

     Sp. Atk  Sp. Def  Speed  Generation  Legendary          cat  
0         65       65     45           1      False    Grass A-M  
1         80       80     60           1      False    Grass A-M  
2        100      100     80           1      False    Grass N-Z  
3        122      120     80           1      False    Grass N-Z  
4         60       50     65           1      False     Fire A-M  
..       ...      ...    ...         ...        ...          ...  
795      100      150     50           6       True     Rock A-M  
796      160      110    110           6       True     Rock A-M  
797      150      130     70           6       True  Psychic A-M  
798      170      130     80           6       True  Psychic A-M  
799      130       90     70           6       True     Fire N-Z  

df = df.pivot_table(index='Generation', columns='cat', values='Name', aggfunc=','.join)
# print (df)

首先創建列名,然后創建 pivot 您的 dataframe:

df['Group'] = df['Type 1'] + ' ' + np.where(df['Name'].str[0].between('A', 'M'), 'A-M', 'N-Z')
out = df.astype({'#': str}).pivot_table('#', 'Generation', 'Group', aggfunc=' '.join)

Output

>>> out
Group                                           Bug A-M                      Bug N-Z             Dark A-M  ...    Steel N-Z                                          Water A-M                                          Water N-Z
Generation                                                                                                 ...                                                                                                                   
1                                     10 11 12 14 15 15   13 46 47 48 49 123 127 127                  NaN  ...          NaN         9 9 55 87 91 98 99 116 118 129 130 130 131  7 8 54 60 61 62 72 73 79 80 80 86 90 117 119 1...
2                               165 166 168 205 214 214      167 193 204 212 212 213      198 228 229 229  ...  208 208 227                159 160 170 171 183 184 222 226 230                158 186 194 195 199 211 223 224 245
3                                   267 268 269 284 314  265 266 283 290 291 292 313          262 359 359  ...          379  258 259 270 271 272 318 339 341 342 349 350 36...            260 260 278 279 319 319 320 321 340 369
4                                   401 402 412 414 415          413 413 413 416 469              430 491  ...          NaN                    395 418 419 423 456 457 458 490                                393 394 422 484 489
5           542 557 558 588 589 595 596 617 632 636 649  540 541 543 544 545 616 637  510 625 630 633 635  ...          NaN                502 550 565 580 592 593 594 647 647                501 503 515 516 535 536 537 564 581
6                                                   NaN                  664 665 666              686 687  ...          NaN                                656 657 658 692 693                                                NaN

[6 rows x 35 columns]

轉置視圖以提高可讀性:

>>> out.T
Generation                                                    1                                    2                                                  3                                                4                                            5                            6
Group                                                                                                                                                                                                                                                                             
Bug A-M                                       10 11 12 14 15 15              165 166 168 205 214 214                                267 268 269 284 314                              401 402 412 414 415  542 557 558 588 589 595 596 617 632 636 649                          NaN
Bug N-Z                              13 46 47 48 49 123 127 127              167 193 204 212 212 213                        265 266 283 290 291 292 313                              413 413 413 416 469                  540 541 543 544 545 616 637                  664 665 666
Dark A-M                                                    NaN                      198 228 229 229                                        262 359 359                                          430 491                          510 625 630 633 635                      686 687
Dark N-Z                                                    NaN                              197 215                                        261 302 302                                              461              509 559 560 570 571 624 629 634                          717
Dragon A-M                                          147 148 149                                  NaN                        334 334 371 380 380 381 381                                  443 444 445 445                  610 611 612 621 646 646 646                      704 706
Dragon N-Z                                                  NaN                                  NaN                                372 373 373 384 384                                              NaN                                      643 644                      705 718
Electric A-M                                  81 82 101 125 135                  179 180 181 181 239                                    309 310 310 312                                  404 405 462 466                              522 587 603 604                  694 695 702
Electric N-Z                                      25 26 100 145                              172 243                                                311                  403 417 479 479 479 479 479 479                              523 602 642 642                          NaN
Fairy A-M                                                 35 36                              173 210                                                NaN                                              NaN                                          NaN              669 670 671 683
Fairy N-Z                                                   NaN                          175 176 209                                                NaN                                              468                                          NaN          682 684 685 700 716
Fighting A-M                                56 66 67 68 106 107                                  237                                296 297 307 308 308                                          448 448                              533 534 619 620                          701
Fighting N-Z                                                 57                                  236                                                NaN                                              447                                  532 538 539                      674 675
Fire A-M                            4 5 6 6 6 58 59 126 136 146                  155 219 240 244 250                                256 257 257 323 323                              390 391 392 467 485                          500 554 555 555 631          653 654 655 662 667
Fire N-Z                                            37 38 77 78                          156 157 218                                        255 322 324                                              NaN                              498 499 513 514                  663 668 721
Flying N-Z                                                  NaN                                  NaN                                                NaN                                              NaN                                      641 641                      714 715
Ghost A-M                                           92 93 94 94                                  200                                    354 354 355 356                          425 426 429 477 487 487                              563 607 608 609              711 711 711 711
Ghost N-Z                                                   NaN                                  NaN                                                353                                              442                                          562      708 709 710 710 710 710
Grass A-M                                     1 2 44 69 102 103              152 153 154 182 187 189                                    253 286 331 332                  388 406 420 421 455 460 460 470                  546 549 556 590 591 597 598                  650 652 673
Grass N-Z                                   3 3 43 45 70 71 114                          188 191 192                252 254 254 273 274 275 285 315 357                      387 389 407 459 465 492 492              495 496 497 511 512 547 548 640                      651 672
Ground A-M                                        50 51 104 105                              207 232                                330 343 344 383 383                                      449 450 472              529 530 552 553 622 623 645 645                          NaN
Ground N-Z                                        27 28 111 112                                  231                                            328 329                                              464                                      551 618                          NaN
Ice A-M                                                 124 144                                  225                                            362 362                                      471 473 478                                  613 614 615                      712 713
Ice N-Z                                                     NaN                          220 221 238                                361 363 364 365 378                                              NaN                                  582 583 584                          NaN
Normal A-M            22 39 52 83 84 85 108 113 115 115 132 133      162 163 174 190 203 206 241 242                        264 294 295 298 301 351 352  399 400 424 427 428 428 431 440 441 446 463 493  506 507 531 531 572 573 585 626 628 648 648              659 660 661 676
Normal N-Z               16 17 18 18 19 20 21 40 53 128 137 143          161 164 216 217 233 234 235        263 276 277 287 288 289 293 300 327 333 335                          396 397 398 432 474 486              504 505 508 519 520 521 586 627                          NaN
Poison A-M                                   23 24 42 88 89 109                                  169                                                316                                          452 453                                          569                          691
Poison N-Z                             29 30 31 32 33 34 41 110                                  NaN                                            317 336                                  434 435 451 454                                          568                          690
Psychic A-M               63 64 65 65 96 97 122 150 150 150 151                          196 249 251                281 282 282 326 358 386 386 386 386                      433 439 475 475 481 482 488              517 518 574 575 576 578 605 606          677 678 678 720 720
Psychic N-Z                                                 NaN                      177 178 201 202                                        280 325 360                                              480                      494 527 528 561 577 579                          NaN
Rock A-M                               74 75 76 140 141 142 142                                  246                                337 345 346 347 348                                      408 411 438                              525 526 566 567  688 689 698 699 703 719 719
Rock N-Z                                             95 138 139                      185 247 248 248                                        299 338 377                                      409 410 476                                      524 639                      696 697
Steel A-M                                                   NaN                                  NaN        303 303 304 305 306 306 374 375 376 376 385                                      436 437 483                              599 600 601 638          679 680 681 681 707
Steel N-Z                                                   NaN                          208 208 227                                                379                                              NaN                                          NaN                          NaN
Water A-M            9 9 55 87 91 98 99 116 118 129 130 130 131  159 160 170 171 183 184 222 226 230  258 259 270 271 272 318 339 341 342 349 350 36...                  395 418 419 423 456 457 458 490          502 550 565 580 592 593 594 647 647          656 657 658 692 693
Water N-Z     7 8 54 60 61 62 72 73 79 80 80 86 90 117 119 1...  158 186 194 195 199 211 223 224 245            260 260 278 279 319 319 320 321 340 369                              393 394 422 484 489          501 503 515 516 535 536 537 564 581                          NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM