当前位置: 首页 > 面试题库 >

按名称列表对Pandas中的多个列进行切片

柴瀚
2023-03-14
问题内容

我正在尝试通过两种不同的方法在Pandas数据框中选择多个列:

1)通过列号,例如1-3列和6列起。

2)通过列名列表,例如:

years = list(range(2000,2017))
months = list(range(1,13))
years_month = list(["A", "B", "B"])
for y in years:
    for m in months:
        y_m = str(y) + "-" + str(m)
        years_month.append(y_m)

然后, years_month 将产生以下内容:

['A',
 'B',
 'C',
 '2000-1',
 '2000-2',
 '2000-3',
 '2000-4',
 '2000-5',
 '2000-6',
 '2000-7',
 '2000-8',
 '2000-9',
 '2000-10',
 '2000-11',
 '2000-12',
 '2001-1',
 '2001-2',
 '2001-3',
 '2001-4',
 '2001-5',
 '2001-6',
 '2001-7',
 '2001-8',
 '2001-9',
 '2001-10',
 '2001-11',
 '2001-12']

也就是说,在两种方法中,仅加载名称在 Years_month 列表中的列的最佳(或正确)方法是什么?


问题答案:

我认为您需要numpy.r_合并列的位置,然后iloc用于选择:

print (df.iloc[:, np.r_[1:3, 6:len(df.columns)]])

对于第二种方法子集,通过list

print (df[years_month])

样品:

df = pd.DataFrame({'2000-1':[1,3,5],
                   '2000-2':[5,3,6],
                   '2000-3':[7,8,9],
                   '2000-4':[1,3,5],
                   '2000-5':[5,3,6],
                   '2000-6':[7,8,9],
                   '2000-7':[1,3,5],
                   '2000-8':[5,3,6],
                   '2000-9':[7,4,3],
                   'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9]})

print (df)
   2000-1  2000-2  2000-3  2000-4  2000-5  2000-6  2000-7  2000-8  2000-9  A  \
0       1       5       7       1       5       7       1       5       7  1   
1       3       3       8       3       3       8       3       3       4  2   
2       5       6       9       5       6       9       5       6       3  3

   B  C  
0  4  7  
1  5  8  
2  6  9

print (df.iloc[:, np.r_[1:3, 6:len(df.columns)]])
   2000-2  2000-3  2000-7  2000-8  2000-9  A  B  C
0       5       7       1       5       7  1  4  7
1       3       8       3       3       4  2  5  8
2       6       9       5       6       3  3  6  9

您也可以总结的ranges(投来listpython 3是必要的):

rng = list(range(1,3)) + list(range(6, len(df.columns)))
print (rng)
[1, 2, 6, 7, 8, 9, 10, 11]

print (df.iloc[:, rng])
   2000-2  2000-3  2000-7  2000-8  2000-9  A  B  C
0       5       7       1       5       7  1  4  7
1       3       8       3       3       4  2  5  8
2       6       9       5       6       3  3  6  9


 类似资料:
  • 问题内容: 我想将数据框的几组列融合为多个目标列。与问题类似,Python Pandas将初始列的组融为多个目标列,并将pandas数据框重塑/将多个值变量堆叠为单独的列。但是,我需要通过列名而不是索引位置来明确地执行此操作。 原始数据框: 目标数据框 对此方法的建议深表感谢。 问题答案: 有一种更有效的方法来解决涉及熔化多组不同色谱柱的这类问题。专为这些确切情况而设计。

  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 问题内容: 这是我的df: 如何将按名称()的列移动到表的前面,索引为0。结果应如下所示: 我当前的代码使用来按索引移动列,但我想按名称进行移动。 问题答案: 我们可以通过传递列表来重新排序: 另一种方法是引用该列,然后将其重新插入前面: 从以后开始,您还可以使用以获得与以后版本的熊猫不建议使用的相同的结果:

  • 问题内容: 我有一个清单清单: 如果要按一个元素(例如,高/短元素)排序,可以通过进行。 如果我想作为排序依据两个高大和颜色,我可以为每个元素做排序两次,一次,但有一个更快的方法? 问题答案: 键可以是返回元组的函数: 或者,你可以使用来实现相同的效果(速度更快,并且避免了Python函数调用): 并请注意,你可以在此处使用而不是使用,然后重新分配:

  • 问题内容: 假设我有一个数据列,其中包含,和,我想按升序按列对数据帧进行排序,然后按降序按列对数据帧进行排序,我该怎么做? 问题答案: 从0.17.0版开始,不推荐使用该方法,而推荐使用。 sort在0.20.0版本中被完全删除。参数(和结果)保持不变: 你可以使用的升序参数sort: 例如: 如@renadeen所评论 默认情况下,排序不正确!因此,你应该将方法的结果分配给变量,或者将添加到方法

  • 问题内容: 我有一个关于将数据框列中的列表分成多行的问题。 假设我有这个数据框: 我想要数字的每个单一组合,因此最终结果将是: 因为现在我得到以下结果: 为了得到上面的结果,我做了: 问题答案: 与斯科特·波士顿(Scott Boston)的建议类似,我建议您分别展开各列,然后将它们合并在一起。 例如,对于“职位”: 并且,一起: