我有一个奇怪的数据帧,它有两个标题级别。第一级构成列标题,第二级构成数据帧的第一行。像这样:
Fav-fruit Unnamed1 Unnamed2 Cost Purchsd? Unnamed3
0 Apples Bananas Pears Yes No
1 Apples 0.10 No
2 Pears 0.30 No
3 Apples 0.10 Yes
我想根据第二级标题(即第0行)删除一组列。例如,要删除第0行中Apples
和Pears
的列以获取此值:
Fav-fruit Cost Purchsd? Unnamed3
0 Pears Yes No
1 0.10 No
2 Pears 0.30 No
3 0.10 Yes
真正的数据框有大约500列,我需要删除大约60列。我不想将第0行提升为一组新的列标题,因为我不想丢失当前的标题。
有一种简单的方法吗?
答案 0 :(得分:1)
您可以将boolean indexing
与loc
一起使用,通过反转(~
)和isin
创建布尔掩码,以便选择第一行使用iloc
:< / p>
mask = df.iloc[0].isin(['Apples','Pears'])
print (mask)
Fav-fruit True
Unnamed1 False
Unnamed2 True
Cost False
Purchsd? False
Unnamed3 False
Name: 0, dtype: bool
print (~mask)
Fav-fruit False
Unnamed1 True
Unnamed2 False
Cost True
Purchsd? True
Unnamed3 True
Name: 0, dtype: bool
print (df.loc[:, ~mask])
Unnamed1 Cost Purchsd? Unnamed3
0 Bananas NaN Yes No
1 NaN 0.1 NaN No
2 NaN 0.3 NaN No
3 NaN 0.1 Yes NaN