python - 在 Pandas 数据框中删除特定的 multiIndex 列

标签 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, 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
  1. 如何从数据框中删除特定的列,例如 ('B', 10) 和 ('B', 20)?
  2. 有没有办法在一个命令中删除列,例如 tdf.drop(['B', [10,20]])?请注意,我知道我的命令示例绝不接近它应有的样子,但我希望它能传达要点。
  3. 有没有办法通过一些逻辑表达式来删除列?例如,假设我想删除子级索引小于 50 的列(同样是 10、20 列)。即使 10,20 子级索引不存在,我是否可以执行一些包含“A”列的通用命令,或者我必须特别引用“B”列?

最佳答案

您可以使用 drop通过元组列表:

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

关于python - 在 Pandas 数据框中删除特定的 multiIndex 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42836840/

相关文章:

python - 从一列列表到多列

python - 如何使用日期时间索引和列连接多个数据帧?

python - 如何重命名 Pandas 中未命名的列?

python - 在python vaex中删除重复的行

python - 将带有日期时间索引的行插入数据框

python匹配目标词

Python - 缩短冗余循环

python - matplotlib 动画保存不遵守 blit=True 但它似乎在 plt.show() 中工作得很好

python - 将数据帧绑定(bind)到 for 循环中的变量会将其转换为元组?

dataframe - 在 Julia 中使用括号与点表示法访问 Dataframe 列