如何基于另一个数据帧计算一个数据帧中的类别?

2024-09-29 01:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据另一个数据集中的详细信息为数据集中的每一行添加学生类型的计数

我有两个数据帧。一个包含学生批次详细信息,另一个包含分数。我想加入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_'))

Tags: 数据name类型详细信息学生计数goodaverage
1条回答
网友
1楼 · 发布于 2024-09-29 01:35:10

答案的第一部分与previous one中相同,只有replace被另一个SeriesCategory替换,然后使用^{},将缺少的值替换为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

编辑:对于指定列以将use subset替换为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))

相关问题 更多 >