Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python(Pandas/Numpy)中,如何使用条件和特定的块大小来子集df?_Python_Numpy_Pandas_Dataframe_Subset - Fatal编程技术网

在Python(Pandas/Numpy)中,如何使用条件和特定的块大小来子集df?

在Python(Pandas/Numpy)中,如何使用条件和特定的块大小来子集df?,python,numpy,pandas,dataframe,subset,Python,Numpy,Pandas,Dataframe,Subset,我有一个df A = pd.DataFrame([[1, 5, 2, 0], [2, 4, 4, 0], [3, 3, 1, 1], [4, 2, 2, 0], [5, 1, 4, 0], [2, 4, 4, 0], [3, 3, 1, 1], [4, 2, 2, 0], [5, 1, 4, 0]], columns=['A', 'B', 'C', 'D'], index=[1, 2, 3, 4, 5, 6, 7, 8, 9]) 我希望能够根据以下规则对数据帧

我有一个df

A = pd.DataFrame([[1, 5, 2, 0], [2, 4, 4, 0], [3, 3, 1, 1], [4, 2, 2, 0], [5, 1, 4, 0], [2, 4, 4, 0], [3, 3, 1, 1], [4, 2, 2, 0], [5, 1, 4, 0]],
                 columns=['A', 'B', 'C', 'D'], index=[1, 2, 3, 4, 5, 6, 7, 8, 9])
我希望能够根据以下规则对数据帧进行子集:选择列“D”值为1的行,并包括上面的两行(Chunk Size=3)

如果我在df示例中应用该规则,则输出应为:

   A  B  C  D
1  1  5  2  0
2  2  4  4  0
3  3  3  1  1
5  5  1  4  0
6  2  4  4  0
7  3  3  1  1

谢谢

这将适用于任何
区块
大小:

>>> chunk, mask = 3, A['D'] == 1
>>> mask -= mask.shift(-chunk).fillna(0)
>>> A[mask[::-1].cumsum() > 0]
   A  B  C  D
1  1  5  2  0
2  2  4  4  0
3  3  3  1  1
5  5  1  4  0
6  2  4  4  0
7  3  3  1  1

谢谢。为什么我会得到这个c:\users\hernan\anaconda\lib\site packages\pandas\core\frame.py:1706:UserWarning:Boolean系列键将被重新索引以匹配数据帧索引。“DataFrame index.”,UserWarning)这有关系吗?@hernanavella如果你不想看到警告,你可以做一个[mask[::-1].cumsum()[:-1]>0],但是这个警告在这里是完全没有问题的。@behzad.nouri你能解释一下为什么这个小改动会删除警告吗?我得到了这个警告,很难理解为什么。@Gregoyarenius没有在末尾添加
[::-1]
,但是
掩码[::-1].cumsum()的索引与数据帧不对齐。警告基本上是说熊猫将执行
reindex
来对齐索引。有关对齐的一些示例,请参见。