이 질문은 내가 게시 한 이전 질문의 속편입니다 : Slicing Pandas Dataframe according to number of lines. 나는 문제를 해결 한 좋은 해답을 가지고있다. 그럼에도 불구하고 솔루션을 다른 방법으로 시도 할 때 기대했던 것을 얻지 못하고 많은 테스트에도 불구하고 이유를 이해하지 못합니다.도청 된 DataFrame 슬라이싱?
'Group'Id (한 그룹에 많은 오브젝트가있을 수 있음)와 수량 (예 : 'R')이 포함 된 pandas 데이터 프레임 df가 있다고 가정합니다. 나는 적어도 4 개의 객체로 구성된 그룹을 가지고 다른 df를 만들고 싶습니다. 그리고 R에 의해 정렬 될 때 4 번째 객체는 R_min보다 낮습니다 (나는 'R_min'을 최대로 호출하는 것이 이상하다는 것을 알지만, 은하의 크기입니다. 음수, 밝음이 낮을수록 - 또는 절대 값이 클수록 밝아짐).
R_min = -18.8
df_processed = (df[df.Group.map(df.Group.value_counts().ge(4))]
.groupby('Group').filter(lambda x: np.any(x.sort_values('R').iloc[3] <= R_min)))
I : 내 문제에 대한 해결책이 완벽하게 작동하는 것 같다이 하나입니다
df = pd.DataFrame({ 'R' : (-21,-21,-22,-3,-23,-24,-20,-19,-34,-35,-30,-5,-25,-6,-7,-22,-21,-10,-11,-12,-13,-14,-15),
....: 'Group': (1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5) })
: 여기에 문제를 위해 구성된 모의 DataFrame이다 동의합니다. 제 3 그룹 만 제 제약하에 남아 있습니다. 확인을하고 내 은하 그룹 카탈로그가 어떻게 구조화되었는지 알기 위해 최소한 4 인의 회원을 보유한 사람들 중에서 무엇이 남았는지 확인합니다. 나는 다음과 같은 코드가 정확히 같은 일을 기대 :
df_left = (df[df.Group.map(df.Group.value_counts().ge(4))]
.groupby('Group').filter(lambda x: np.any(x.sort_values('R').iloc[3] > R_min)))
불행하게도 그렇지 않습니다 :
가장 stricking 포인트는 여기에있는 해당 그룹 3 df_left도입니다! R로 분류하면 그룹 3은 -35, -34, -30, -19, -5가되며 그 중 네 번째 값은 -19이며 -18.8보다 작습니다. 어째서? 선택 방법이 잘못 되었습니까? 어떻게 수정해야합니까? x.sort_values('R').iloc[3]
이 DataFrame뿐 아니라 열 R
로 구성된 시리즈 정렬되어 있기 때문에
많은 감사
링크 된 게시물에 대한 답변이 나에게 나올 것입니다. 지금 당신이 지적한 바에는 약간의 오류가있었습니다. 필요한 변경 사항이있는 게시물을 업데이트했습니다. –
쿨, 고마워! :) – Matt