Pandas 根据dataframe第一行中的不同值删除多个列
我有一个奇怪的数据帧,它有两个级别的标题。第一级构成列标题,第二级构成数据帧的第一行。像这样:Pandas 根据dataframe第一行中的不同值删除多个列,pandas,Pandas,我有一个奇怪的数据帧,它有两个级别的标题。第一级构成列标题,第二级构成数据帧的第一行。像这样: Fav-fruit Unnamed1 Unnamed2 Cost Purchsd? Unnamed3 0 Apples Bananas Pears Yes No 1 Apples 0.10 No 2
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
真正的dataframe大约有500列,我需要删除其中的60列。我不想将第0行提升为一组新的列标题,因为我不想丢失当前标题
有一种简单的方法可以做到这一点吗?您可以使用loc
,布尔掩码是通过反转(~
)创建的,对于选择第一行使用:
很 完美!这很有效。我很难理解索引,但那个解释真的很有帮助。谢谢您!
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