为了账号安全,请及时绑定邮箱和手机立即绑定

获取没有(...,)pandas python的每一行中具有最大值的列的索引

获取没有(...,)pandas python的每一行中具有最大值的列的索引

萧十郎 2022-07-05 19:46:23
我在我的 Jupyter 上工作过。我想知道是否有办法在表中的每一行中找到最大值的位置(列索引)。 例如,它看起来像这样:yo1 = [1,3,7]yo2 = [2,4,5,6,8]yo3 = [0.1,0.3,0.7]yo4 = [0.2,0.4,0.5,0.6,0.8]yoo = []for x in yo3:    vvv = []    for y in yo4:        dot = x*y        na = x+x        nb = y+y        prod = dot/(na+nb)        vvv.append(prod)    yoo.append(vvv)yooo = pd.DataFrame(yoo, columns=(yo2), index=[yo1])print(yooo)(是的,这是余弦相似度)output:      2         4         5         6         81  0.033333  0.040000  0.041667  0.042857  0.0444443  0.060000  0.085714  0.093750  0.100000  0.1090917  0.077778  0.127273  0.145833  0.161538  0.186667然后,我想在每一行中获取具有最大值的列的索引。我用这个:go = yooo.idxmax().reset_index()go.columns=['column', 'get']gooutput:    column  get0   2       (7,)1   4       (7,)2   5       (7,)3   6       (7,)4   8       (7,)但我想要的输出是:output:    column  get0   2       71   4       72   5       73   6       74   8       7我试过用 ' ' 替换 '('go['get']=go['get'].str.replace('(','')并使用了 lstrip-rstripgo['get']=go['get'].map(lambda x: x.lstrip('(').rstrip(',)'))还有这个top_n=1get = pd.DataFrame({n: yooo[col].nlargest(top_n).index.tolist() for n, col in enumerate(yooo)}).T他们都没有很好地工作:(帮帮我..如何解决这个问题,你能给我解释一下吗???谢谢!
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

你真正的问题是在你的'yooo'的数据框构造函数中,你用[]包装一个列表,创建一个二维列表,从而创建一个pd.MultiIndex,因此是元组(7,)。改用这个:


 yooo = pd.DataFrame(yoo, columns=(yo2), index=yo1)


 yooo.idxmax()

输出:


2    7

4    7

5    7

6    7

8    7

dtype: int64

并进一步获取具有列名的数据框:


yooo.idxmax().rename_axis('column').rename('get').reset_index()

输出:


   column  get

0       2    7

1       4    7

2       5    7

3       6    7

4       8    7


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信