2016-09-19 64 views
1

我有一個列表,讓我們說,看起來像這樣(這我把成DF):熊貓:由列拖放準重複值

[ 
['john', '1', '1', '2016'], 
['john', '1', '10', '2016'], 
['sally', '3', '5', '2016'], 
['sally', '4', '1', '2016'] 
] 

columns['name', 'month', 'day', 'year']

我基本上只想輸出一個新的DF,每個人只有最舊的行。所以它應該包含兩行,一個在1/1/16的約翰和一個在3/5/16的薩利。

在DF的這種選擇中,我一直都很難過,希望有人能提供一些關於如何完成上述的建議。

回答

4

您可以按year, month, day數據幀,然後採取的第一行從每個name

df.sort_values(by = ['year', 'month', 'day']).groupby('name').first() 

# month day year 
# name   
# john 1 1 2016 
#sally 3 5 2016 

數據

df = pd.DataFrame([['john', '1', '1', '2016'], 
        ['john', '1', '10', '2016'], 
        ['sally', '3', '5', '2016'], 
        ['sally', '4', '1', '2016']], 
        columns = ['name', 'month', 'day', 'year']) 
0

選項1個
使用pd.to_datetime解析['年','月','日' ] 列。
groupby('name')然後採取first

df['date'] = pd.to_datetime(df[['year', 'month', 'day']]) 
df.sort_values(['name', 'date']).groupby('name').first() 

enter image description here

選項2
相同pd.to_datetime用法。
groupby('name')idxmin查找最小日期。

df['date'] = pd.to_datetime(df[['year', 'month', 'day']]) 
df.ix[df.groupby('name').date.idxmin()] 

enter image description here

+0

排序由'name'是沒有必要的,是嗎? –

+0

不,不過,如果我要查看一個intermdeiate的結果,我想保留名字。雖然沒有必要。 – piRSquared