Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何基于另一个数据帧计算一个数据帧中的类别?_Python_Pandas_Dataframe_Join - Fatal编程技术网

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

Python 如何基于另一个数据帧计算一个数据帧中的类别?,python,pandas,dataframe,join,Python,Pandas,Dataframe,Join,我想根据另一个数据集中的详细信息,为数据集中的每一行添加学生类型计数 我有两个数据帧。一个包含学生批次详细信息,另一个包含分数。我想加入2个数据帧 Dataframe1包含 +-------+-------+-------+--+ | s1 | s2 | s3 | | +-------+-------+-------+--+ | Stud1 | Stud2 | Stud3 | | | Stud2 | Stud4 | Stud1 | | | Stud1 | Stud3 |

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

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

答案的第一部分与中相同,仅用另一个
系列
替换为
类别
,然后使用,将缺少的值替换为
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
编辑:对于指定列以将使用子集替换为
列表

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))

谢谢你的回复。但是,当我在1以下做的时候,甚至这个都会出现在新的专栏中。有没有办法指定我们需要计数的列@DevAnanth-第一部分似乎相同,但需要上一个答案的另一列替换-更改
s=dfnamepoints。将索引('Name')['Point']
设置为
s1=dfnamepoints。设置索引('Name')['Category']
,然后在
replace
之后添加
apply
,我不知道我是否正确解释了这个问题。在上面的例子中,假设我有另一列s4,但我不想转换它。我只想计算s1、s2和s3的类别。@DevAnanth-我现在明白了,请检查编辑的答案。同样的解决方案适用于前面的答案。这正是我想要的。谢谢。