在下表中,我正在尝试确保1个学生ID有1个名字。例如,Student_ID
101
有2个与之关联的名称(Adam和Bob)。所以我想得到Student_ID
。
我需要的结果是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 :(得分:1)
按Student_ID
分组并应用函数nunique
将按ID计算名称数量:
df.groupby('Student_ID')['Name'].nunique()
您可以过滤上面的结果,也可以直接过滤原始数据框:
df.groupby('Student_ID').filter(lambda group: group['Name'].nunique() > 1)
答案 1 :(得分:0)
字典是个好主意。用它来映射学生姓名到他们被看到的次数。
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
中为你实现了一个。给该类一个迭代器,它将创建一个字典,计算在迭代器中看到给定值的次数。
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")