2013-10-13 3 views
0

팬더 질문을 도와 줄 사람이 있습니까? 나는 이와 같은 시계열 dataframe 있습니다팬더 데이터 프레임 내의 조건 테스트

     GOOG  AAPL 
2010-12-09 16:00:00 591.50 551 
2010-12-10 16:00:00 592.21 523 
2010-12-13 16:00:00 594.62 578 
2010-12-14 16:00:00 594.91 567 
2010-12-15 16:00:00 590.30 577 
... 

내가 그때 날짜와 해당 항목에 대한 AAPL의 가격을 인쇄 할,이 경우 AAPL이> (570)인지 테스트 각각의 타임 스탬프를 통해 루프 필요 . 이것이 가능한가?

+0

난 단지 사용했습니다 팬더,하지만 난 제대로 회수하고있어 경우는 그래서 당신은 my_dataframe을 사용할 수 있습니다 NumPy와의 위에 구축 .where (my_dataframe [:, 2]> 570) –

답변

1

아 하 겠어요 :

무엇을 NumPy와의 상단에 내장되어 있기 때문에 당신이 할 수있는 것은 이것이다 : 당신은 거의 완료

my_dataframe[my_dataframe.AAPL > 570] 

합니다. 여기에서 지금은 그냥 당신이 필요로하는 값을 인쇄하는 것, AAPL> (570)에 해당하는 모든 행이 있습니다

valid_rows = my_dataframe[my_dataframe.AAPL > 570] 
for row in valid_rows.to_records(): 
    print row[1],row[2] 

dataframe.where는 전체 프레임을 검색에 사용할 수 있습니다. 팬더가 기둥을 쉽게 참조 할 수 있다는 사실을 잊어 버렸습니다.

+0

나는 이것을 할 수있는 더 좋은 방법이있을 것이라고 확신하지만 이것은 나의 머리 꼭대기에서 기억할 수있는 것이다. –

+0

안녕 라이언,이게 잘 돼서 고마워. – Ahdee

+0

또한, 라이언의 코드를 조금 더 'for my_dataframe [my_dataframe.AAPL> 1] .to_records() : 행을 인쇄 행 [0], 행 [2] – Ahdee

3

pandas의 주요 이점 중 하나는 루프가 필요하지 않으므로 numpy에 작성되므로 전체 열에서 쉽게 작동 할 수 있습니다.

df['AAPL'][df['AAPL'] > 570] 

출력 : 그것은만큼 간단 과거에 한 번

2010-12-13 16:00:00 578 
2010-12-15 16:00:00 577 
Name: AAPL, dtype: int64 
+0

''df로 간결하게 수정합니다. [AAPL ']> 570,'AAPL ']''(할당을하면이 방법으로해야합니다. – Jeff

+0

Marius와 Jeff에게 감사드립니다.) 이것은 – Ahdee

+0

또한 출력 만하고 싶다면 월 - 일 및 가격? – Ahdee