Как рассчитать категорию в одном кадре данных на основе другого? - PullRequest
0 голосов
/ 09 февраля 2019

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

У меня есть 2 кадра данных.Один, содержащий информацию о студенческой партии, а другой с точками.Я хочу объединить 2 кадра данных.

Dataframe1 содержит

+-------+-------+-------+--+
|  s1   |  s2   |  s3   |  |
+-------+-------+-------+--+
| Stud1 | Stud2 | Stud3 |  |
| Stud2 | Stud4 | Stud1 |  |
| Stud1 | Stud3 | Stud4 |  |
+-------+-------+-------+--+

Dataframe2 содержит

+-------+-------+----------+--+
| Name  | Point | Category |  |
+-------+-------+----------+--+
| Stud1 |    90 | Good     |  |
| Stud2 |    80 | Average  |  |
| Stud3 |    95 | Good     |  |
| Stud4 |    55 | Poor     |  |
+-------+-------+----------+

Я пытаюсь отобразить количество людей в каждой категории в одной и той женабор данных для каждой строки.

+-------+-------+-------+------+---------+------+
|  S1   |  S2   |  S3   | Good | Average | Poor |
+-------+-------+-------+------+---------+------+
| Stud1 | Stud2 | Stud3 |    2 |       1 |    0 |
| Stud2 | Stud4 | Stud1 |    1 |       1 |    1 |
| Stud1 | Stud3 | Stud4 |    2 |       0 |    1 |
+-------+-------+-------+------+---------+------+

Я пробовал ниже, но не работал

s = df.set_index('Name')['Category']
df6 = df5.join(df5.replace(s).add_prefix('Type_'))

1 Ответ

0 голосов
/ 09 февраля 2019

Первая часть ответа такая же, как в предыдущей , только replace другой Series с Category, затем используйте value_counts, замените пропущенные значения на0 и последнее преобразование всех в целые числа:

s1 = dfnamepoints.set_index('Name')['Category']
df = df3.join(df3.replace(s1).apply(pd.value_counts, axis=1).fillna(0).astype(int))
print (df)
      s1     s2     s3  Average  Good  Poor
0  Stud1  Stud2  Stud3        1     2     0
1  Stud2  Stud4  Stud1        1     1     1
2  Stud1  Stud3  Stud4        0     2     1

РЕДАКТИРОВАТЬ: Для указания столбцов для замены используйте подмножество с list:

s = dfnamepoints.set_index('Name')['Category']
cols = ['s1','s2','s3']
df = df3.join(df3[cols].replace(s).apply(pd.value_counts, 1).fillna(0).astype(int))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...