2016-10-27 5 views
0

Der Versuch zu erstellen - in Python mit mehreren Datenrahmen - das Äquivalent einer Zahl in Excel, die mehrere Blätter umfassen würde.Python Pandas countifs mit mehreren Kriterien UND mehrere Datenrahmen

Ich brauche eine neue Spaltenanzahl von Datensätzen auf andere Datenrahmen basierend auf Kriterien aus dem aktuellen Datenrahmen.

Siehe Excel impression von dem, was ich in Python tun möchte, auch here.

Mein Ziel?

  • Count Prüfungen auf Studenten Datenrahmen
  • von Studentenausweis
  • mit Prüfungstermin> einschreiben = date
  • mit Prüfungstermin < = detail Datum
  • mit Prüfunggrad> = 70

Grundsätzlich wäre das Excel-Äquivalent ...

= COUNTIFS (Zusammenfassung $ B $ 1:! B $ 11 $ "> =" & Details B2, Zusammenfassung $ B $ 1:!! B $ 11 $ "< =" & Details C2, Zusammenfassung! $ C $ 1: $ C $ 11, "> =" & 70, Zusammenfassung $ A $ 1:! $ A $ 11 "=" & Details A2)

... wo Zusammenfassung ist der primäre Datenrahmen und Detail ist der sekundäre Datenrahmen, in dem ich Datensätze zählen möchte.

diese Antworten in meiner Forschung gefunden:

Nicht ganz das, was ich suche, weil sie mehrere Datenrahmen nicht tun umspannen . Ich konnte eine grundlegende COUNTIFS für einen Singular Datenrahmen erstellen:

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

Antwort

0

Im Grunde, was Sie zwei Datenrahmen tun wollen eingerichtet ist, sagen df1 für die „Prüfung bestanden“ Informationen und df2 für die Noten für jede Prüfung.

, um sich selbst begann, die Sie in Ihrem Excel-Dateien wie folgt lesen:

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

Dann für jede Zeile in df1 Sie wollen Segment df2 und bekommen die Länge der segmentierten Datenrahmen.

Zuerst wenn Sie für jede Zeile in df1 Liste der Informationen machen möchten, die wie dies geschehen könnte:

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

Dann können Sie die Zeilen wie folgt durchlaufen:

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)]) 
         ) 

Dann fügen Sie/ersetzen Sie die Spalte in df1:

df1['Exams Passed'] = N_exams_passed 

um die Daten richtig Sie vergleichen w Ich brauche sie nicht in Datetime-Objekte in jedem Pandas-Datenrahmen zu konvertieren, und ich überlasse das Ihnen. Tipp: Sie können die pd.to_datetime() Funktion verwenden.

+0

es funktioniert, danke. Niemals wäre es so weit gekommen. Steile Lernkurve im Vergleich zu Excel. –

Verwandte Themen