2017-10-18 94 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 
相關問題