Python 在数据帧中删除特定的多索引列

Python 在数据帧中删除特定的多索引列,python,pandas,dataframe,hierarchical-data,multi-index,Python,Pandas,Dataframe,Hierarchical Data,Multi Index,假设有一个数据帧是这样创建的: tdata = {('A', 50): [1, 2, 3, 4], ('A', 55): [5, 6, 7, 8], ('B', 10): [10, 20, 30, 40], ('B', 20): [50, 60, 70, 80], ('B', 50): [2, 4, 6, 8], ('B', 55): [10, 12, 14, 16]} tdf = pd.DataFrame

假设有一个数据帧是这样创建的:

tdata = {('A', 50): [1, 2, 3, 4],
         ('A', 55): [5, 6, 7, 8],
         ('B', 10): [10, 20, 30, 40],
         ('B', 20): [50, 60, 70, 80],
         ('B', 50): [2, 4, 6, 8],
         ('B', 55): [10, 12, 14, 16]}
tdf = pd.DataFrame(tdata, index=range(0,4))

      A      B
     50 55  10  20 50  55
   0  1  5  10  50  2  10
   1  2  6  20  60  4  12
   2  3  7  30  70  6  14
   3  4  8  40  80  8  16
  • 如何从数据帧中删除特定列,例如('B',10)和('B',20)
  • 是否有一种方法可以在一个命令中删除列,例如
    tdf.drop(['B',[10,20]])
    ?请注意,我知道我的命令示例与它应该是什么并不接近,但我希望它能够理解要点
  • 有没有办法通过某种逻辑表达式删除列?例如,假设我想删除子级别索引小于50的列(同样是10、20列)。即使10,20子级别索引不存在,我是否可以执行包含列“A”的一般命令,或者我是否必须特别引用列“B”
  • 您可以通过
    元组的
    列表

    print (tdf.drop([('B',10), ('B',20)], axis=1))
       A     B    
      50 55 50  55
    0  1  5  2  10
    1  2  6  4  12
    2  3  7  6  14
    3  4  8  8  16
    
    对于按
    级别删除列

    mask = tdf.columns.get_level_values(1) >= 50
    print (mask)
    [ True  True False False  True  True]
    
    print (tdf.loc[:, mask])
       A     B    
      50 55 50  55
    0  1  5  2  10
    1  2  6  4  12
    2  3  7  6  14
    3  4  8  8  16
    
    如果需要按级别删除,请仅指定一个级别:

    print (tdf.drop([50,55], axis=1, level=1))
        B    
       10  20
    0  10  50
    1  20  60
    2  30  70
    3  40  80
    

    你能解释更多吗
    即使10,20子级索引不存在,我能做一些包含列“A”的一般命令吗?或者我必须特别引用列“B”?
    @jezrael谢谢你的提问。我想知道我是否可以做一些事情,比如通配符顶级的“A”和“B”,然后去寻找我不想要的子级别,比如tdf.drop([:,[10,20]])。我认为不可能,这是不可能的。仅按选择,但不删除。