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