2015-03-03 24 views
6

Hãy nói rằng tôi có một DataFrame như thế này:gấu trúc có được vị trí của một chỉ số được đưa ra trong DataFrame

df 
    A B 
5 0 1 
18 2 3 
125 4 5 

nơi 5, 18, 125 là chỉ số

Tôi muốn để có được những dòng trước (hoặc sau) một chỉ mục nhất định. Ví dụ: tôi có chỉ mục 18 (ví dụ: bằng cách thực hiện df[df.A==2].index) và tôi muốn nhận được dòng trước đó và tôi không biết rằng dòng này có 5 làm chỉ mục hay không.

2 câu hỏi phụ:

  • Làm thế nào tôi có thể có được vị trí của chỉ số 18? Một cái gì đó như df.loc[18].get_position() mà sẽ trả lại 1 vì vậy tôi có thể đạt được dòng trước với df.iloc[df.loc[18].get_position()-1]
  • Có một giải pháp, một chút giống như tùy chọn -C, -A hoặc -B với grep?

Trả lời

10

Đối với câu hỏi đầu tiên của bạn:

base = df.index.get_indexer_for((df[df.A == 2].index)) 

hoặc cách khác

base = df.index.get_loc(18) 

Để có được những người xung quanh:

mask = pd.Index(base).union(pd.Index(base - 1)).union(pd.Index(base + 1)) 

tôi đã sử dụng chỉ số và các đoàn thể để loại bỏ các bản sao. Bạn có thể muốn giữ chúng, trong trường hợp này bạn có thể sử dụng np.concatenate

Hãy cẩn thận với các kết quả phù hợp trên hàng đầu tiên hoặc cuối cùng :)

Các vấn đề liên quan