python - 如何从两个矩阵数据框中提取值
问题描述
我有一个熊猫数据框,如下所示。
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)
我的实际数据框比上面的样本大得多,想知道有什么好的方法可以在不指定单元格的情况下进行提取。对你的帮助表示感谢。谢谢你。
解决方案
这是pivot
之后的问题melt
,我正在使用crosstab
,如果您想了解更多信息,请查看此
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
推荐阅读
- java - Http请求和响应没有返回任何东西
- javascript - 从左到右的动画列表
- python - 使用python和ffmpeg从dicts列表中的两个值循环
- node.js - 使用 typescript 和 express 时,我无法让 res.send 在我的控制器中使用显式类型,但是当类型为 anny 时它确实有效
- c# - c# DataTable 单元格更新后出现意外的空行
- appdynamics - 当我启动 app-dynamics 机器代理时,它没有将任何日志写入日志文件夹
- html - 在 SpringEL 表达式中将字符串转换为 Long 以进行选择
- laravel - 如何生成动态 Laravel Nova 选择字段?
- android - 在 viewModelScope 中设置后 LiveData 值为 null
- java - Minecraft-moding:Mod 仅在 IDE 中有效,但在导出为 jar 时无效