假设有一个这样创建的数据框:
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”列?
最佳答案
您可以使用 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/