gpt4 book ai didi

python-3.x - Pandas,如何使用带有多索引数据帧的子集删除值?

转载 作者:行者123 更新时间:2023-12-04 01:39:59 24 4
gpt4 key购买 nike

我有一个带有多索引列的数据框。

从这个数据框中,我需要删除列子集中具有 NaN 值的行。

我正在尝试使用 subset pd.dropna 的选项但我没有设法找到指定列子集的方法。我试过使用 pd.IndexSlice但这不起作用。

在下面的示例中,我需要乘坐最后一行。

import pandas as pd

# ---
a = [1, 1, 2, 2, 3, 3]
b = ["a", "b", "a", "b", "a", "b"]
col = pd.MultiIndex.from_arrays([a[:], b[:]])
val = [
[1, 2, 3, 4, 5, 6],
[None, None, 1, 2, 3, 4],
[None, 1, 2, 3, 4, 5],
[None, None, 5, 3, 3, 2],
[None, None, None, None, 5, 7],
]
# ---
df = pd.DataFrame(val, columns=col)
# ---
print(df)
# ---
idx = pd.IndexSlice
df.dropna(axis=0, how="all", subset=idx[1:2, :])
# ---
print(df)

使用 thresh option 是另一种选择,但如果可能的话,我想使用 subsethow='all'

最佳答案

在处理 MultiIndex 时,MultiIndex 的每一列都可以指定为一个元组:

In [67]: df.dropna(axis=0, how="all", subset=[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')])
Out[67]:
1 2 3
a b a b a b
0 1.0 2.0 3.0 4.0 5 6
1 NaN NaN 1.0 2.0 3 4
2 NaN 1.0 2.0 3.0 4 5
3 NaN NaN 5.0 3.0 3 2

或者,选择第一级等于 1 的所有列或 2你可以使用:
In [69]: df.dropna(axis=0, how="all", subset=df.loc[[], [1,2]].columns)
Out[69]:
1 2 3
a b a b a b
0 1.0 2.0 3.0 4.0 5 6
1 NaN NaN 1.0 2.0 3 4
2 NaN 1.0 2.0 3.0 4 5
3 NaN NaN 5.0 3.0 3 2
df[[1,2]].columns也有效,但这会返回一个(可能很大)中间 DataFrame。 df.loc[[], [1,2]].columns由于其中间 DataFrame 为空,因此内存效率更高。

关于python-3.x - Pandas,如何使用带有多索引数据帧的子集删除值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57887109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com