Python 从多索引数据帧中删除具有所有NaN值的项

Python 从多索引数据帧中删除具有所有NaN值的项,python,pandas,Python,Pandas,我在与看起来像这样的数据帧争论时遇到了一些问题: value year name 2015 bob 10.0 cat NaN 2016 bob NaN cat NaN 我想删除那些相同名称的所有值都是NaN的项目。在这种情况下,结果应为: value year name 2015

我在与看起来像这样的数据帧争论时遇到了一些问题:

                    value
year        name
2015        bob     10.0
            cat     NaN
2016        bob     NaN
            cat     NaN
我想删除那些相同
名称
的所有
值都是NaN的项目。在这种情况下,结果应为:

                    value
year        name
2015        bob     10.0
2016        bob     NaN
所有
cat
值均为NaN,因此
cat
已消失。因为
bob
有一个非NaN值,所以它会保持不变

请注意,输入中的
2016
值均为NaN,但输出中仍然存在
2016
——因为此规则仅适用于
name
列。理想情况下,我希望能够提供这适用于哪个列作为参数


这可能吗?我该怎么做?如果要完成工作,需要重新编制索引/进行转置/做任何事情,我都可以。

您可以使用
unstack
isnull
all
stack

df.unstack().loc[:,~df.unstack().isnull().all()].stack(-1, dropna=False)
或者使用
notnull
any

df.unstack().loc[:,df.unstack().notnull().any()].stack(-1, dropna=False)
输出:

              value
year name       
2015 bob    10.0
2016 bob     NaN
你可以用


删除重复项是否会产生意外影响?e、 g.如果两个
cat
s的值都是
100
而不是NaN,它仍然会被删除,对吗?我只希望NaN值受到影响。当我在实际数据帧上使用它时,我得到一个
{AttributeError}'DataFrame'对象没有属性'value'
。知道为什么吗?@spinningarrow值是列名。将其更改为您认为合适的列名。谢谢
              value
year name       
2015 bob    10.0
2016 bob     NaN
df.groupby(level='name').filter(lambda x: x.value.notnull().any())

           value
year name       
2015 bob    10.0
2016 bob     NaN