当所有子列完全空白时如何删除 pandas 多级数据框列

how to drop a pandas multi level dataframe column when all sub columns are completely blank

数据帧:

|--------------------------------------------------------------------|
|    Name        |    email          |  Phone no    |   Gender       |
|----------------|-------------------|--------------|----------------|
|legacy | target |legacy    | target |legacy|target |legacy | target |
|-------|--------|----------|--------|------|-------|-------|--------|
|Name1  |Name1   |n1@abc.com|        |      |       |       |        |
|Name2  |Name2   |          |        |      |   12  |       |        |
|--------------------------------------------------------------------|

预期输出:

|---------------------------------------------------|
|    Name        |    email          |  Phone no    |
|----------------|-------------------|--------------|
|legacy | target |legacy    | target |legacy|target |
|-------|--------|----------|--------|------|-------|
|Name1  |Name1   |n1@abc.com|        |      |       |
|Name2  |Name2   |          |        |      |   12  |
|---------------------------------------------------|

我正在使用以下代码,但它也删除了“电子邮件目标”和“phone 无遗留”列。

df.dropna(how='all', axis=1, inplace=True)

但是我只想删除“性别”列,因为这是唯一一个旧字段和目标字段都完全空白的列。

谁能帮帮我。

谢谢。

尝试(我假设空单元格是 NaN):

m=df.isna().all().unstack(level=1)
cols=m[m.all(1)].index.tolist()

最后使用get_level_values():

df=df.loc[:, ~df.columns.get_level_values(0).isin(cols)] 

df的输出:

         Name             Email             Phone no
    Legecy  Target  Legecy      Target  Legecy  Target
0   Name1   Name1   n1@abc.com  NaN     NaN     NaN
1   Name1   Name2   NaN         NaN     NaN     12

尝试(我假设空单元格是字符串 ""):

m = (~df.eq("").all().groupby(level=0).all()).eq(True)
x = df.loc[:, m.index[m]]
print(x)

打印:

    Name        Phone no          email       
  legacy target   legacy target  legacy target
0  Name1  Name1                  n1@abc       
1  Name2  Name2              12