根据数据帧第一行中的不同值删除多个列

时间:2017-02-21 20:30:02

标签: pandas

我有一个奇怪的数据帧,它有两个标题级别。第一级构成列标题,第二级构成数据帧的第一行。像这样:

     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行中ApplesPears的列以获取此值:

     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行提升为一组新的列标题,因为我不想丢失当前的标题。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以将boolean indexingloc一起使用,通过反转(~)和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