2016-10-27 3 views
0

여러 데이터 프레임을 사용하는 Python에서 - 여러 시트에 걸쳐있는 Excel의 countif와 동일합니다. 여러 기준과 여러 데이터 프레임을 사용하는 python pandas countifs

현재의 데이터 프레임으로부터 기준에 기초하여 또 다른 데이터 프레임에 기록 새로운 칼럼 카운트가 필요하다.

파이썬에서 수행하고 싶은 것의 Excel impression도 참조하십시오. here.

나의 목표는 무엇입니까? 학생들 데이터 프레임

  • 시험 날짜와 학생 ID
  • 에 의한에

    • 카운트 시험은> = 시험 날짜 < = 세부 날짜와 날짜
    • 를 등록 시험 등급> = 70

    기본적으로 Excel과 동일합니다 ...

    ,515,

    = COUNTIFS (요약 $ B 1 $! $ B $ 11 "> ="& 세부 B2, 요약 $ B 1 $!! $ B $ 11 "< ="& 세부 C2, 요약! $ C $ 1 : $ C $ 11 "> =" 요약 $ A $ 1! 요약 기본 데이터 프레임 $ A $ 11 "="& 세부 A2)

    ... Detail은 레코드를 계산할 2 차 데이터 프레임입니다.

    내 연구에서 이러한 답을 찾았가 여러 데이터 프레임에 걸쳐하지 않기 때문에

    꽤 나는 찾고 있어요하지 무엇을 .

    sum(1 for x in students['Student ID'] if x == 1) 
    sum(1 for x in exams['Exam Grade'] if x >= 70) 
    
  • 답변

    0

    은 기본적으로 당신이 두 dataframes을 설정해야 할 것입니다 무엇에 대한 정보와 df2 "을 통과 시험"를위한 df1 말 : 나는 단일 데이터 프레임에 대한 기본 COUNTIFS을 만들 수 있었다 각 시험의 점수. 세그먼트 df2에 당신이 원하는 df1의 각 행에 대해 다음

    df1 = pd.read_excel('filename1.xlsx') 
    df2 = pd.read_excel('filename2.xlsx') 
    

    을하고 분할 dataframe의 길이를 얻을 :

    이처럼 엑셀 파일에 읽을 수있는, 자신을 시작하려면.

    student_info = df1[['Student ID', 'Enrollment Date', 'Qualification Date']].values 
    

    그런 다음이 같은 행을 반복 할 수 있습니다 :

    N_exams_passed = [] # Store counts for each student in a list 
    
    for s_id, s_enroll, s_qual in student_info: 
        N_exams_passed.append(len(df2[(df2['Student ID']==s_id) & 
                (df2['Exam Date']>=s_enroll) & 
                (df2['Exam Date']<=s_qual) & 
                (df2['Grade']>=70)]) 
             ) 
    
    이 같이 할 수 DF1의 각 행에 대한 정보의 목록을 작성 할 수 있습니다하지만

    우선

    그리고 DF1에서 대체/열을 추가

    df1['Exams Passed'] = N_exams_passed 
    

    을 승 제대로을 날짜를 비교하기 위해 팬더 데이터 프레임마다 datetime 객체로 변환해야 할 필요가 있으며,이를 남겨 두겠습니다. 힌트 : pd.to_datetime() 기능을 사용할 수 있습니다.

    +0

    작동합니다. 감사합니다. 결코 그곳에 도착하지 않았을 것입니다. Excel에 비해 가파른 학습 곡선. –

    관련 문제