当前位置: 首页 > 知识库问答 >
问题:

无法使用更改列顺序(带条件)。loc

和飞翔
2023-03-14

我有一个DataFrame,里面有很多列,我想根据其他列的值重新组织一些列的顺序(不是所有列)。

我试着改变顺序。loc,当我运行代码时,它显示了我想要的,但当我试图用它设置值时,它没有。

例如,我只想更改类型为A的数学答案的顺序,所以最后两个答案应该是:“ABC”和“ACB”

import pandas as pd
import numpy as np

data = pd.DataFrame({'Type_Bio':['A','A','B','A','B'],
                     'Type_Math':['B','B','B','A','A'],
                     'Ans_Bio':['AEC','ABC','AAC','CBA','BCA'],
                     'Ans_Math':['AEC','ABC','AAC','CBA','BCA']})

data
        Type_Bio  Type_Math     Ans_Bio     Ans_Math
0               A       B           AEC             AEC
1               A       B           ABC             ABC
2               B       B           AAC             AAC
3               A       A           CBA             CBA
4               B       A           BCA             BCA

我用这个代码来拆分数学答案:

data = pd.concat([data, data.loc[:,'Ans_Math'].str.split('', expand = True).iloc[:,1:4]], axis = 1)
        Type_Bio    Type_Math   Ans_Bio Ans_Math    1   2   3
0           A           B           AEC AEC         A   E   C
1           A           B           ABC ABC         A   B   C
2           B           B           AAC AAC         A   A   C
3           A           A           CBA CBA         C   B   A
4           B           A           BCA BCA         B   C   A

然后,我注意到:

data.loc[data.Type_Math == 'A',np.arange(1, 4)][np.arange(3,0,-1)]

给出了我想要的(几乎)(只有我想要的线条,颠倒!)

    3   2   1
3   A   B   C
4   A   C   B

因此,下一步是设置值:

data.loc[data.Type_Math == 'A',np.arange(1, 4)] = data.loc[data.Type_Math == 'A',np.arange(1, 4)][np.arange(3,0,-1)]
data

但数据本身没有改变:

        Type_Bio    Type_Math   Ans_Bio Ans_Math    1   2   3
0           A           B           AEC AEC         A   E   C
1           A           B           ABC ABC         A   B   C
2           B           B           AAC AAC         A   A   C
3           A           A           CBA CBA         C   B   A
4           B           A           BCA BCA         B   C   A

我知道复制设置有一些错误,但我想使用。loc不会有这个问题,请有人解释并帮助?

共有1个答案

孟英锐
2023-03-14

这就是你要找的:

data.loc[data.Type_Math == 'A', [1,2,3]] = data.loc[data.Type_Math == 'A', [3,2,1]].values

输出:

  Type_Bio Type_Math Ans_Bio Ans_Math  1  2  3
0        A         B     AEC      AEC  A  E  C
1        A         B     ABC      ABC  A  B  C
2        B         B     AAC      AAC  A  A  C
3        A         A     CBA      CBA  A  B  C
4        B         A     BCA      BCA  A  C  B
 类似资料:
  • 我有以下(): 我按分配添加更多列: 如何将列移到前面,即将其设置为第一列,其他列的顺序保持不变?

  • 我使用的是,它用于根据中的当前查询筛选中的数据,如如何使用SearchView筛选RecyclerView中所述。 问题是项目的顺序也必须能够改变。通过具有方法的类与交互。如果用户更改了项目的排序方式,我需要更改它,但我不确定如何做到这一点。 当前的情况只需要颠倒顺序,所以这个问题可以通过和来解决,但我想知道如何提供一种完全不同的方式来排序中的项目。

  • 问题内容: 我有以下: 我通过分配添加了更多列: 如何将列mean移到最前面,即将其设置为第一列,而其他列的顺序保持不变? 问题答案: 你还可以执行以下操作: 你可以通过以下方式获取列列表: 输出将产生: …然后轻松将其放到第一个功能中即可手动重新排列

  • 问题内容: 我正在创建一个RESTful Web服务(在Golang中),该服务从数据库中提取一组行并将其返回给客户端(智能手机应用程序或Web应用程序)。该服务需要能够提供分页。唯一的问题是,此数据在定期更改的“计算”列上排序(例如,网站上某内容的“竖起大拇指”或“竖起大拇指”的数量),因此 行可以在在客户的要求之间 。 我看了一些PostgreSQL功能,可以潜在地用来帮助我解决这个问题,但是

  • 问题内容: 这是一个非常基本的问题,但是我正在尝试使用以下方法更改node.js / Express应用程序的图标 而且我仍在使用默认图标。这是在我的功能,是的,我已经验证,有 是 一个在。还有的约没有在控制台中,要么,我相信这线索,这行代码被忽略。函数中的其他所有内容(设置端口,设置视图目录,设置模板引擎等)似乎都正常,那么为什么这行代码无法执行? 我尝试了什么 清空浏览器缓存 重新启动终端并再

  • 问题内容: 我需要能够增加和减少对象中数组元素的位置。 我在MongoDB API中 查看了该API,但找不到任何让我这样做的东西。 我正在尝试使用贯通,并且我知道要向上或向下移动的元素的索引。 编码图像数组项的示例: 我想向上或向下移动“ img2”(但由于无处可去,因此“图像”应该不能向上推)。 如果我想向上推“ img2”,那么结果将是: 通过更改索引,交换或上推/下推来实现此目标都没有关系