我有桌子
|Majors|First Minor|Second Minor|
|Philosophy|English|Null|
|Math|Philosophy|English|
|English|Theology|Political Science
|Philosophy|Theology|English|“第一小数”和“第二小数”栏的可能值相同(英语、哲学、数学等)。
我想看看这些专业的“专业”和“未成年人”之间的相关性。我不在乎这个未成年人是第一个还是第二个未成年人。因此,基于上面的示例,我想要一个类似于以下内容的输出:
|Major|Philosophy|Math|English
First Minor||||
Philosophy|0|1|0|
|Math|0|0|0|
|English|2|1|0|
Political Science|0|0|1|
Theology|1|0|1|
Null|1|0|0以下代码仅为“第一个次要”或“第二个次要”生成所需的结果:
ct = pd.crosstab(newdf.MajorInterMinor, newdf["First Minor"])
但是我想得到这两列的结果(“第一个小的”和“第二个次要的”),我不知道如何得到合并的结果。
任何帮助/建议都是非常感谢的!
发布于 2022-02-12 22:36:42
melt未成年人,然后应用crosstab
df2 = df.melt(id_vars='Majors', value_name='Minors')
pd.crosstab(df2['Majors'], df2['Minors'])输出:
Minors English Null Philosophy Political Science Theology
Majors
English 0 0 0 1 1
Math 1 0 1 0 0
Philosophy 2 1 0 0 1发布于 2022-02-12 23:47:38
pd.melt将FirstMinor、SecondMinor折叠成一个列并生成新的df
df2 = pd.melt(df,id_vars=['Majors'], value_vars=['FirstMinor','SecondMinor'],var_name='myVarname', value_name='FirstMinor_SecondMinor')将新的df切片到专业的get_dummies。把这个加入到df中。群与和
pd.DataFrame(df2.loc[:,'FirstMinor_SecondMinor']).join(pd.get_dummies(df2.loc[:,'Majors'])).groupby('FirstMinor_SecondMinor').agg(sum)
English Math Philosophy
FirstMinor_SecondMinor
English 0 1 2
Null 0 0 1
Philosophy 0 1 0
PoliticalScience 1 0 0
Theology 1 0 1https://stackoverflow.com/questions/71096367
复制相似问题