Python 3.x DataFrame对象是否有办法根据单行条件以及前面的行来获取行?比如';grep-B1…';它在Linux上运行吗

Python 3.x DataFrame对象是否有办法根据单行条件以及前面的行来获取行?比如';grep-B1…';它在Linux上运行吗,python-3.x,pandas,Python 3.x,Pandas,我有一个pd.DataFrame对象df,我可以选择一些行,比如在一个单列条件下,我可以抓取与该条件匹配的所有行,但我希望在每个与该条件匹配的行之前抓取前一行。结果应该是包含这些行的pd.DataFrame 我可以编写代码来实现这一点,我不是在要求它(但是如果你认为你有一个简洁的方法,请随意举例说明),但我想知道熊猫是否没有一个内置的工具来实现它,我不知道 一个显示我正在寻找的内容的示例: import pandas as pd df = pd.DataFrame([{'a':1, 'b':'a

我有一个pd.DataFrame对象df,我可以选择一些行,比如在一个单列条件下,我可以抓取与该条件匹配的所有行,但我希望在每个与该条件匹配的行之前抓取前一行。结果应该是包含这些行的pd.DataFrame

我可以编写代码来实现这一点,我不是在要求它(但是如果你认为你有一个简洁的方法,请随意举例说明),但我想知道熊猫是否没有一个内置的工具来实现它,我不知道

一个显示我正在寻找的内容的示例:

import pandas as pd
df = pd.DataFrame([{'a':1, 'b':'apples'}, {'a':5, 'b':'pears'}, {'a':2, 'b':'4 plums'},
                   {'a':9, 'b':'bananas'}, {'a':5, 'b':'cherries'}, {'a':2, 'b':'100 grapes'},
                   {'a':3, 'b':'oranges'}, {'a':8, 'b':'cherries'}])
print(df)
# prints:                | my markings here, not part of printout, showing
#    a           b       | with a '+' the rows i wish to select and why
# 0  1      apples       |
# 1  5       pears       | +  - because it's a preceding row
# 2  2     4 plums       | +  - because it has a number
# 3  9     bananas       |
# 4  5    cherries       | +  - because it's a preceding row    
# 5  2  100 grapes       | +  - because it has a number
# 6  3     oranges       |
# 7  8    cherries       |

# condition would be all the rows where 'b' column has the number of items too:
df[[not x.isalpha() for x in df.b]]
# but this returns only the condition rows, of index 2 and 5, not rows
# 1, 2, 4, 5 as i want it.

IIUC,您正在寻找
shift(-1)



谢谢,这解决了我的问题,很简洁很短!!我明白了,如果我想要前两行,我可以使用你的技巧,比如c=~df.b.str.isalpha()df[c | c.shift(-1)| c.shift(-2)],但是如果我想要更多的行呢?你能给我演示另一个技巧来实现这一点吗,或者我应该为所有这些添加“或”条件,比如:df[c | c.shift(-1)| c.shift(-2)|……| c.shift(-20)]我的意思是像在“grep-bn…”中一样,你要求前面的n行,以及每个匹配行,而不是匹配行和后面的第n行。我认为这是问题的自然延伸,以防万一它也有一个简单的解决方案。不管怎样,我对你的主要答案很满意!
c=~df.b.str.isalpha()
df[c|c.shift(-1)]
   a           b
1  5       pears
2  2     4 plums
4  5    cherries
5  2  100 grapes