python - Pandas:当列中的所有数据均为 NaN 时,从多级索引中删除索引条目(及其所有行)

标签 python pandas dataframe

我想用多级索引清理数据框中的一些数据。

                | A   | B   | 
----------------+-----+-----+
foo  2019-01-01 | x   | NaN |
     2019-01-02 | x   | NaN |
     2019-01-03 | NaN | NaN |
................+.....+.....+
bar  2019-01-01 | NaN | x   |
     2019-01-02 | NaN | y   |
     2019-01-03 | NaN | z   |
................+.....+.....+
baz  2019-01-01 | x   | x   |
     2019-01-02 | x   | x   |
     2019-01-03 | x   | x   |

我想释放由 bar 索引的完整组,因为 A 列中的所有数据都是 NaN。我想保留 foo,因为 A 列中只有部分数据是 NaN(B 列在这里并不重要,即使都是 NaN)。我想保留 baz,因为并非所有 A 列都是 NaN。 所以我的结果应该是这样的:

                | A   | B   | 
----------------+-----+-----+
foo  2019-01-01 | x   | NaN |
     2019-01-02 | x   | NaN |
     2019-01-03 | NaN | NaN |
................+.....+.....+
baz  2019-01-01 | x   | x   |
     2019-01-02 | x   | x   |
     2019-01-03 | x   | x   |

使用 pandas 和 python 执行此操作的最佳方法是什么?我想有比遍历数据更好的方法...

最佳答案

groupby.transform , notna() & any()

我们可以在您的第一级索引上groupby,然后检查 A 列中的任何值是否不是NaN

我们使用transform 得到相同形状的 bool 数组,所以我们可以使用boolean indexing过滤出正确的行。

m = df['A'].notna().groupby(level=0).transform('any')
df[m]
                  A    B
idx idx2                
foo 2019-01-01    x  NaN
    2019-01-02    x  NaN
    2019-01-03  NaN  NaN
baz 2019-01-01    x    x
    2019-01-02    x    x
    2019-01-03    x    x

m 返回什么?

m = df['A'].notna().groupby(level=0).transform('any')
print(m)

idx  idx2      
foo  2019-01-01     True
     2019-01-02     True
     2019-01-03     True
bar  2019-01-01    False
     2019-01-02    False
     2019-01-03    False
baz  2019-01-01     True
     2019-01-02     True
     2019-01-03     True
Name: A, dtype: bool

关于python - Pandas:当列中的所有数据均为 NaN 时,从多级索引中删除索引条目(及其所有行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56869643/

相关文章:

python - 如何编写注册账户测试用例?

python - 如何删除具有重复值的不同列名?

python - 将偶数行列的值添加到Python中的奇数行

python - pandas 根据相同日期合并行

python - 如何从我的数据框列表中获取特定列。

python - Pandas:检查两个数据帧是否匹配值,然后根据标签填充一行

python - 使用python在json中设置日期时间对象

python - 如何在pytorch中测试一张图片

python - 在 Base64 编码后恢复表示图像的 numpy 数组

python - 对行匹配条件的列子集进行排序