我有一个奇怪的数据帧,它有两个级别的标题。第一级组成列标题,第二级组成数据帧的第一行。如下所示:
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行提升为一组新的列标题,因为我不想丢失当前的标题。
有什么简单的方法可以做到这一点吗?
发布于 2017-02-22 04:34:10
您可以将boolean indexing与loc一起使用,布尔掩码是通过反转(~)和isin创建的,对于select第一行使用iloc
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 NaNhttps://stackoverflow.com/questions/42377344
复制相似问题