2017-07-12 63 views
3

我有這樣一個數據幀:刪除重複的基礎上在另一列,Python的價值,熊貓

Date    PlumeO  Distance 
2014-08-13 13:48:00 754.447905 5.844577 
2014-08-13 13:48:00 754.447905 6.888653 
2014-08-13 13:48:00 754.447905 6.938860 
2014-08-13 13:48:00 754.447905 6.977284 
2014-08-13 13:48:00 754.447905 6.946430 
2014-08-13 13:48:00 754.447905 6.345506 
2014-08-13 13:48:00 754.447905 6.133567 
2014-08-13 13:48:00 754.447905 5.846046 
2014-08-13 16:59:00 754.447905 6.345506 
2014-08-13 16:59:00 754.447905 6.694847 
2014-08-13 16:59:00 754.447905 5.846046 
2014-08-13 16:59:00 754.447905 6.977284 
2014-08-13 16:59:00 754.447905 6.938860 
2014-08-13 16:59:00 754.447905 5.844577 
2014-08-13 16:59:00 754.447905 6.888653 
2014-08-13 16:59:00 754.447905 6.133567 
2014-08-13 16:59:00 754.447905 6.946430 

我試圖跟上的最小距離的日期,所以下降的重複日期並保持最小的距離。

有沒有辦法在熊貓'df.drop_duplicates中實現這一點,或者我堅持使用if語句來查找最小距離?

回答

7

排序距離和一滴日期:

df.sort_values('Distance').drop_duplicates(subset='Date', keep='first') 
Out: 
        Date  PlumeO Distance 
0 2014-08-13 13:48:00 754.447905 5.844577 
13 2014-08-13 16:59:00 754.447905 5.844577 
+1

清潔和簡單的,謝謝! – Ahmed

+0

不客氣。 – ayhan

+1

儘管必須排序,這個答案也非常快( - : – piRSquared

4

這些方法的優點是,它不需要排序。

選項1
您可以idxmin識別索引值的最低值,並且可以將groupby中使用它。使用這些結果來切片你的數據框。

df.loc[df.groupby('Date').Distance.idxmin()] 

        Date  PlumeO Distance 
0 2014-08-13 13:48:00 754.447905 5.844577 
13 2014-08-13 16:59:00 754.447905 5.844577 

選項2
您可以使用pd.DataFrame.nsmallest返回與最小距離關聯的行。

df.groupby('Date', group_keys=False).apply(
    pd.DataFrame.nsmallest, n=1, columns='Distance' 
) 

        Date  PlumeO Distance 
0 2014-08-13 13:48:00 754.447905 5.844577 
13 2014-08-13 16:59:00 754.447905 5.844577 
0

我首先要說排序的數據,然後丟棄重複日期:

stripped_data = df.sort_values('distance').drop_duplicates('date', keep='first') 
相關問題