如何在所有子列完全为空的情况下删除pandas多级数据帧列



数据帧:

|--------------------------------------------------------------------|
|    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  |
|---------------------------------------------------|

我正在使用下面的代码,但它正在删除";电子邮件目标";以及";电话没有遗留";列。

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

然而,我只想放弃";性别;列,因为这是唯一一个遗留字段和目标字段都完全为空的列。

有人能帮我吗?

谢谢。

try(我假设空单元格是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

Try(我假设空单元格是字符串""(:

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               

相关内容

最新更新