2017-04-10 1 views
0

In der folgenden Tabelle versuche ich sicherzustellen, dass 1 Student ID 1 Namen hat. Zum Beispiel hat Student_ID101 2 Namen zugeordnet (Adam und Bob). Also möchte ich die Student_ID bekommen.Sicherstellen, dass die Spaltendaten 1 zu 1 übereinstimmen

Das Ergebnis, das ich brauche, wäre ID: 101 (weil es 2 Namen zugeordnet hat).

Student_ID Name Text 
101 Adam 234 
200 Cat 45645 
101 Adam 5476456 
200 Cat 34 
101 Bob 456 
200 Cat 456 
200 Cat 4356 
300 Cat 356 

Wie kann ich mit diesem Problem vorgehen? Ich glaube nicht, dass wir ein Wörterbuch benutzen können. Ich brauche nur eine Richtung, um dieses Problem zu lösen.

+0

Also, hat die vorgeschlagene Lösung geholfen? – IanS

Antwort

1

durch Student_ID Gruppierung und Anwendung der Funktion nunique wird die Anzahl der Namen, die von ID zählen:

df.groupby('Student_ID')['Name'].nunique() 

Sie können entweder das Ergebnis oben filtern, oder filtern Sie die Original-Datenrahmen direkt:

df.groupby('Student_ID').filter(lambda group: group['Name'].nunique() > 1) 
0

Ein Wörterbuch ist eine großartige Idee. Verwenden Sie diese Option, um den Schülernamen so zu zählen, wie oft er gesehen wurde.

import csv 

students = {} 

with open('test.csv') as fp: 
    next(fp) # skip header 
    for row in csv.reader(fp, delimiter=' ', skipinitialspace=True): 
     if row: 
      student = row[1] 
      if student in students: 
       students[student] += 1 
      else: 
       students[student] = 1 

for student, count in students.items(): 
    if count > 1: 
     print(student, "present mutliptle times") 

Sein solch eine große Idee, dass Python für Sie implementiert in collections.Counter. Geben Sie dieser Klasse einen Iterator und es wird ein Wörterbuch erstellt, das zählt, wie oft ein bestimmter Wert in diesem Iterator gesehen wird.

import collections 

with open('test.csv') as fp: 
    next(fp) # skip header 
    students = collections.Counter(row[1] 
     for row in csv.reader(fp, delimiter=' ', skipinitialspace=True) 
     if row) 

for student, count in students.items(): 
    if count > 1: 
     print(student, "present mutliptle times") 
Verwandte Themen