2017-10-18 121 views
1

从两个字符串列大熊猫数据帧寻找像:集团通过大熊猫的数据帧的唯一的第一价值观 - numpy的数组返回

d = {'SCHOOL' : ['Yale', 'Yale', 'LBS', 'Harvard','UCLA', 'Harvard', 'HEC'], 
    'NAME' : ['John', 'Marc', 'Alex', 'Will', 'Will','Miller', 'Tom']} 

df = pd.DataFrame(d) 

通知NAME学校之间的关系为n为1 我想如果一个人去过两所不同的学校,最后一所学校(请参阅“意志”案例)。

到目前为止我:

df = df.groupby('NAME')['SCHOOL'].unique().reset_index() 

返回:

 NAME   SCHOOL 
0 Alex   [LBS] 
1 John   [Yale] 
2 Marc   [Yale] 
3 Miller  [Harvard] 
4  Tom   [HEC] 
5 Will [Harvard, UCLA] 

问题:

  • 唯一的()同时返回学校不仅最后学校
  • 此行返回SCHOOL列作为np.array而不是字符串。这个df很难继续工作。
+0

尝试'last'而不是'unique'。 – IanS

+0

谢谢@IanS!这有助于摆脱所有学校的np.array,但为了威尔的。有关于此的任何想法? – AlexSB

+0

我的错......我没有重新定义'df'变量。 'last()'完美地工作。谢啦!!我是Python新手,如果你不介意你能解释为什么'last()'工作? (Pandas文档对我没有多大帮助......) – AlexSB

回答

1

根据@IanS注释解决的两个问题。

使用last()而不是unique()

df = df.groupby('NAME')['SCHOOL'].last().reset_index() 

返回:

 NAME SCHOOL 
0 Alex  LBS 
1 John  Yale 
2 Marc  Yale 
3 Miller Harvard 
4  Tom  HEC 
5 Will  UCLA 
1

使用drop_duplicates与参数last并指定列检查重复:

df = df.drop_duplicates('NAME', keep='last') 
print (df) 
    NAME SCHOOL 
0 John  Yale 
1 Marc  Yale 
2 Alex  LBS 
4 Will  UCLA 
5 Miller Harvard 
6  Tom  HEC 

此外,如果需要排序加sort_values

df = df.drop_duplicates('NAME', keep='last').sort_values('NAME') 
print (df) 
    NAME SCHOOL 
2 Alex  LBS 
0 John  Yale 
1 Marc  Yale 
5 Miller Harvard 
6  Tom  HEC 
4 Will  UCLA