我有一个如下所示的熊猫数据框。
import pandas as pd
df1=pd.DataFrame({'Group1':['a','b','c','d','e'],'Group2':["f","g","h","i","j"],'Group3':['k','L','m','n',"0"]})
print(df1)
df2=pd.DataFrame({'Group1':[0,0,2,1,0],'Group2':[1,2,0,0,0],'Group3':[0,0,0,1,1]})
print(df2)
df1是学生姓名的数据框。 df2是他们测试成绩的数据框。
例如,如果我比较df1和df2,则g和c的测试分数为2。
n,o,f,d的值为1。
其中其余的值为0。
我想比较df1和df2,然后提取学生的姓名和分数。
预期的输出数据帧如下所示。
df3=pd.DataFrame({'2':["g","c","NaN","NaN","NaN","NaN","NaN","NaN","NaN"],'1':["n","o","f","d","NaN","NaN","NaN","NaN","NaN"],'0':["k","L","m","h","i","j","a","b","e"]})
print(df3)
我的实际数据帧比上述示例大得多,并且想知道是否有任何无需指定单元格的良好提取方法。 对你的帮助表示感谢。 谢谢。
答案 0 :(得分:2)
这是pivot
之后的melt
问题,我正在使用crosstab
,如果您想了解更多信息,请检查this
i=df2.melt().groupby('value').cumcount()
c=df2.melt().value
v=df1.melt().value
pd.crosstab(index=i,columns=c,values=v,aggfunc='sum')
value 0 1 2
row_0
0 a d c
1 b f g
2 e n None
3 h 0 None
4 i None None
5 j None None
6 k None None
7 L None None
8 m None None