基于pandas/NumPy中的多个切片选择子集?

2024-04-26 10:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我想基于几个切片选择一些数据帧列的子集。你知道吗

In [1]: df = pd.DataFrame(data={'A': np.random.rand(100), 'B': np.random.rand(100), 'C': np.random.rand(100)})
        df.head()

Out[1]:            A           B           C
        0   0.745487    0.146733    0.594006
        1   0.212324    0.692727    0.244113
        2   0.954276    0.318949    0.199224
        3   0.606276    0.155027    0.247255
        4   0.155672    0.464012    0.229516

比如:

In [2]: df.loc[[slice(1, 4), slice(42, 44)], ['B', 'C']]

预期产量:

Out[2]:            B           C
        1   0.692727    0.244113
        2   0.318949    0.199224
        3   0.155027    0.247255
        42  0.335285    0.000997
        43  0.019172    0.237810

我已经看到NumPy的r_对象在想要使用多个切片时可以提供帮助,例如:

In [3]: arr = np.array([1, 2, 3, 4, 5, 5, 5, 5])
        arr[np.r_[1:3, 4:6]]
Out[3]: array([2, 3, 5, 5])

但是我不能让它与一些预定义的切片集合(列表)一起工作。理想情况下,我希望能够在此基础上指定范围/切片和子集的集合。我好像不接受iterables?例如,我看到可以使用hstack创建一个数组,然后将其用作索引,如:

In [4]: idx = np.hstack((np.arange(1, 4), np.arange(42, 44)))
        df.loc[idx, ['B', 'C']]
Out[4]:            B           C
        1   0.692727    0.244113
        2   0.318949    0.199224
        3   0.155027    0.247255
        42  0.335285    0.000997
        43  0.019172    0.237810

这让我得到了我所需要的,但是有没有其他更快/更干净/更喜欢的/不管怎样的方法?你知道吗


Tags: indfnp切片slicerandomoutarray