2017-04-10 3 views
0

下記の表では、1つの学生IDに1つの名前があることを確認しようとしています。たとえば、Student_ID101には2つの名前(AdamとBob)が関連付けられています。だから私はStudent_IDを取得したい。列データに1対1の一致があることを確認する

必要な結果は、ID:101(2つの名前が関連付けられているため)です。

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 

どうすればこの問題を解決できますか?私は辞書を使うことはできないと思う。私はこの問題を解決するために前進する方向性が必要です。

+0

したがって、提案されたソリューションは役に立ちましたか? – IanS

答えて

1

IDで名の数をカウントする機能nuniqueStudent_IDによってグループ化と適用:

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

:あなたが直接、元のデータフレームを上記の結果をフィルタリングし、またはフィルタリングすることができますいずれか

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

辞書は素晴らしい考えです。生徒名を何回見たのかを数えます。

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

これは、pythonがcollections.Counterにあなたのために1つを実装しているという素晴らしいアイデアです。そのクラスにイテレータを与えて、そのイテレータで与えられた値が何回見えるかを数える辞書を作成します。

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") 
関連する問題