pandas сравнение двух разных фреймов данных длины и разбиение определенных строк на половину - PullRequest
0 голосов
/ 05 марта 2020

Я разбираюсь в том, как работает Pandas, и я изо всех сил пытаюсь манипулировать и сравнивать Pandas фреймы данных.

У меня есть три фрейма данных, извлеченных только необходимая информация;

subjectDF:
   Subject ID              Subject  Year  Teaching Hours PW Facility Requirement
0       Mat13                Maths    13                  5                    N
1      FMat13  Further Mathematics    13                  5                    N
2       Eco13            Economics    13                  5                    N
3       Geo13            Geography    13                  5                    N
4       His13              History    13                  4                    N
5   EngLang13     English Language    13                  4                    N
6    EngLit13   English Literature    13                  4                    N
7       Ger13               German    13                  4                    N
8       Fre13               French    13                  4                    N
9       Spa13              Spanish    13                  4                    N
10      Bus13             Business    13                  4                    N
11     Film13         Film Studies    13                  4                    N
12      Psy13           Psychology    13                  5                    N
13      Lat13                Latin    13                  4                    N
14      Gre13                Greek    13                  4                    N
15      Cla13            Classical    13                  4                    N
16     Phil13           Philosophy    13                  4                    N

studentDF:
      Subject                                         Student ID  Student Number
0       Art13                                          [S8, S19]               2
1       Bio13  [S1, S4, S12, S13, S18, S24, S25, S28, S29, S3...              17
2       Bus13                                    [S10, S30, S47]               3
3       Che13  [S1, S2, S3, S4, S12, S13, S14, S24, S25, S26,...              20
4       Cla13                                     [S9, S33, S35]               3
5       Com13  [S2, S3, S10, S14, S16, S19, S31, S45, S192, S...              10
6       Eco13  [S6, S15, S17, S20, S23, S30, S31, S36, S41, S...              13
7   EngLang13                           [S9, S11, S21, S22, S47]               5
8    EngLit13                       [S5, S9, S22, S28, S32, S37]               6
9      FMat13                     [S7, S14, S27, S38, S45, S192]               6
10     Film13                                               [S8]               1
11      Fre13                     [S5, S15, S18, S29, S37, S193]               6
12      Geo13  [S6, S11, S20, S23, S32, S34, S36, S41, S42, S43]              10
13      Ger13                                   [S17, S43, S195]               3
14      Gre13                                         [S33, S40]               2
15      His13            [S5, S11, S21, S22, S32, S35, S37, S41]               8
16      Lat13                                         [S33, S35]               2
17      Mat13  [S1, S2, S3, S4, S6, S7, S10, S12, S13, S14, S...              34
18     Phil13              [S15, S16, S21, S40, S42, S193, S194]               7
19      Phy13  [S1, S7, S26, S27, S38, S44, S48, S49, S50, S2...              12
20      Psy13                                          [S8, S46]               2
21      Spa13                                    [S18, S36, S47]               3

classroomDF:
  Classroom ID Facility  Capacity
0            C8     None        25
1            C9     None        30
2           C10     None        12
3           C11     None        10
4           C12     None        10
5           C13     None        10
6           C14     None        20
7           C15     None        15
8           C16     None        15
9           C17     None        22
10          C22     None         5
11          C23     None         5

Я пытаюсь сравнить 'Subject ID' в subjectDF и 'Subject' в studentDF, и если строка в 'Subject' не указан в 'Subject ID', удалите строку. Например, поскольку Bio13 в 'Subject' нет в списке в 'Subject ID', я хочу удалить Bio13 из studentDF.

Таким образом, предполагаемый вывод будет точно таким же, как studentDF но без строк, которые не входят в 'Subject ID'.

studentDF:
      Subject                                         Student ID  Student Number
0       Art13                                          [S8, S19]               2
1       Bus13                                    [S10, S30, S47]               3

Я пробовал много разных подходов, но большую часть времени я получал следующую ошибку:

ValueError: Can only compare identically-labeled Series objects

Я не являюсь уверен, что если я задам еще один вопрос здесь, я опубликую его сейчас, и если это проблема, я опубликую в другом вопросе.

После того, как studentDF был изменен, я хочу сравнить 'Student Numbers' в studentDF против 'Capacity' в classroomDF и если «Номер студента»> «Вместимость», разделите студентов и предмет на две части. Например, в Mat13 учатся 34 ученика, что больше максимальной вместимости classroomDF. Поэтому я хочу снова изменить studentDF следующим образом; studentDF:

        Subject                                         Student ID  Student Number
16       ....
17      Mat13_1  [S1, S2, S3, S4, S6, S7, S10, S12, S13, S14, S...              17
18      Mat13_2  [S15, S16, S...                                                17
         ....

Любая помощь для решения этой проблемы будет принята с благодарностью!

1 Ответ

0 голосов
/ 05 марта 2020

IIU C, это то, что вы ищете

studentDF[~studentDF['Subject'].isin(subjectDF['Subject ID'])]

Вывод (столбцы идентификатора студента выглядят здесь усеченными из-за настроек экрана моего ноутбука Jupyter)

Subject     Student ID                                          Student Number
0   Art13   [S8, S19]                                           2
1   Bio13   [S1, S4, S12, S13, S18, S24, S25, S28, S29, S3...   17
3   Che13   [S1, S2, S3, S4, S12, S13, S14, S24, S25, S26,...   20
5   Com13   [S2, S3, S10, S14, S16, S19, S31, S45, S192, S...   10
19  Phy13   [S1, S7, S26, S27, S38, S44, S48, S49, S50, S2...   12
...