第1行数据已经根据大小进行了列排序
如果第0 行物质有重复(波长-列的index),则按左面的取,只保留一个波长列。 eg: CF2 只保留251.5, 删除271.0,259.0列
自己写的思路是先把1行非数字类型infoCol 去掉然后sort_values-> 转置以后在drop_duplicates(keep= 'first'), 也完成了想做的事情, 但最后还要再把infoCol 全拼回来感觉太复杂了,应该有更好的办法~~
indexSpeciesP = indexSpecies[list(set(indexSpecies.columns).difference(infoCol))]#.iloc[0:2,:]
indexSpeciesP = indexSpeciesP.sort_values(axis = 1, by = 1,ascending = False)
indexSpeciesP = indexSpeciesP.T.drop_duplicates(subset = [0],keep = 'first').T
indexSpeciesPP = pd.concat([indexSpecies[infoCol],indexSpeciesP], axis = 1)
原始数据是下面这种没经过排序的
如果第0行物质有重复,保留第一行数值大的那列,其他删掉,请问怎么写好一点
不用排序,一遍循环搞定
遍历数组,把数据放入到python的dict里面
dict的key是0行的内容,如:CF2,N2,CO2,CN,Sin,O/CN之类
value是一个两个元素的数组或者tuple也行,结构为
[index行值,第1行以后的整列的值]
,如:[251.5,[22677,2657.8]]
循环遍历时,先找Key,找到key后,比较value的第一个元素index行值和当前遍历index行值,如当前遍历值小,continue。如果大,index行值和第1行以后的整列值整体覆盖Value
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。