【问题标题】:Extract rows between two specific cells pandas提取两个特定单元格之间的行 pandas
【发布时间】:2020-04-17 14:27:30
【问题描述】:

我需要从col2 列中提取单元格epicstory 之间的n 行。

这是我的输入:

import pandas as pd
df = pd.DataFrame({'col1': ['aze ', 'az a', 'az a', 'azs abv','aze ', 'az a', 'azs abv', 'abc 45','wqas', 'foo bar abc', 'foo abv', 'abc 45', 'abc 45'], 'col2': ['epic', 'ac4', 'ac5', 'story','story', 'ac10', 'ac6', 'epic','ac11', 'ac1', 'ac2', 'ac3', 'story'], 'col3': ['hey', 'hello', 'hola', 'yoopy','hawdi', 'yiiha', 'yow', 'yalla', 'yiiha', 'yow', 'yalla', 'yalla', 'yalla']})  
print(df) 

           col1   col2   col3
0          aze    epic    hey
1          az a    ac4  hello
2          az a    ac5   hola
3       azs abv  story  yoopy
4          aze   story  hawdi
5          az a   ac10  yiiha
6       azs abv    ac6    yow
7        abc 45   epic  yalla
8          wqas   ac11  yiiha
9   foo bar abc    ac1    yow
10      foo abv    ac2  yalla
11       abc 45    ac3  yalla
12       abc 45  story  yalla

这是所需的输出:

          col1    col2    col3
0         az a     ac4    hello
1         az a     ac5    hola
2         wqas     ac11   yiiha
3   foo bar abc    ac1    yow
4       foo abv    ac2    yalla
5        abc 45    ac3    yalla

@ansev 提出的解决方案给了我这个输出:

       col1   col2   col3
0     az a    ac4  hello
1     az a    ac5   hola
2     aze   story  hawdi
3     az a   ac10  yiiha
4  azs abv    ac6    yow
5   abc 45  story  yalla

【问题讨论】:

  • 您有多个名为 epicstory 的条目。这个应该怎么处理?
  • 是的,多个条目。但我只需要尊重地提取史诗和故事之间的行。不知道行不行
  • 我猜每次你有一个“史诗”条目时,你都会有一个“故事”条目,对吧?
  • 是的,没错
  • 因为问题是无法测试图片数据,所以ansev无法测试出什么问题

标签: python-3.x pandas extract rows


【解决方案1】:

IIUC,boolean indexingSeries.mod 在第一个epic之前将所有值设置为False后检测从史诗到故事的变化。

epic = df['col2'].eq('epic') 
story = df['col2'].eq('story')
df.loc[(epic | story).where(epic.cumsum().ge(1), False)
                     .cumsum()
                     .mod(2)
                     .eq(1)
                     .where(~epic, False)].reset_index(drop=True)

输出

      col1 col2   col3
0     az a   ac  hello
1  azs abv   ac   hola

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多