가정하자 나는팬더 : 반복 필터 기능 DataFrame의 행
df[(df['a'] == 'x') & (df['c'] == 2)]
, 그래서 같은 DataFrame
,
df = pd.DataFrame([['x', 1, 2], ['x', 1, 3], ['y', 2, 2]],
columns=['a', 'b', 'c'])
가, 내가 좋아하는 뭔가를 할 수 c == 2
및 a == 'x'
모든 행을 선택하려면이 아니면 할 수 임시 변수를 만들어 반복적으로 수정,
df1 = df[df['a'] == 'x']
df2 = df1[df1['c'] == 2]
행을 반복적으로 수정하는 방법은 무엇입니까? 이 지금은 해결책은 아니지만
(
df
.refine(lambda row: row['a'] == 'x') # this method doesn't exist
.refine(lambda row: row['c'] == 2)
)
@AndyHayden 아니, 내가 올바르게 이해하는 경우. chaining의 경우 chaining만큼'query'를 여러 번 호출 할 것입니다. 나는 체인을'']''에있는 표현식으로 "'''''''''''에 넣을 수있는 좋은 방법이 있다고 생각하지 않습니다. –
그것은 단지 문체적인 취향입니다. 메서드 체인을 사용하면 코드가 명확 해집니다. pandas 0.13을 사용하면'DataFrame.query' 구문을 통해 개별 열에 대한 간단한 비교가 아닌 임의의 행 기능을 필터링 할 수 있습니까? – duckworthd
아마도 그렇지 않습니다. 지금 함수 호출은 파서에서 구현되지 않습니다. 질의는 임의의 함수 호출을 지원하지 않는 numexpr을 사용하여 큰 배열 (> 10000 요소)에 대해 큰 속도 향상을 가져옵니다 (몇 가지 numpy 수학 함수와'where' IIRC를 지원합니다). 다른 백엔드는 임의의 callable을 지원할 수 있지만, 핵심'query' 코드가 병합되면이를 구현할 수는 있지만 스타일에 대한 가치는 거의 없습니다. 또는'DataFrame'에 대한 메소드를 추가하여 원하는 것을 할 수 있습니다 (체인 선택). 그러나 본질적으로 느린 것처럼 보입니다. –