簡體   English   中英

Pandas從組中獲取列的第一個和最后一個值

[英]Pandas get first and last value of column from group

嗨,我的dataframe包含相同ID的多行。 其中一列是日期(按升序排列)。 我想計算第一個條目和最后一個條目之間的日期差異。

我這樣做是通過實例化一個pandas構造函數,如下所示:

g = df.groupby('ID')

print(pd.DataFrame({'first':g.Date.nth(0), 'last':g.Date.nth(-1)}))

第一個值是正確的,但是,最后一個值遠不正確。

例如,對於特定ID,第first date2000-05-08last date8/21/2010 輸出的結果是:

               first       last
ID                         
31965.0        2000-05-08  2002-12-29

2002-12-29在中間的某個地方。

樣本數據:

ID  Date
31965   5/8/2000
31965   5/10/2000
31965   5/18/2000
31965   5/22/2000
31965   5/23/2000
31965   5/25/2000
31965   5/30/2000
31965   6/7/2000
31965   6/8/2000
31965   6/11/2000
31965   6/13/2000
.....
31965   4/11/2009
31965   5/9/2009
31965   5/16/2009
31965   5/23/2009
31965   2/5/2010
31965   2/26/2010
31965   3/13/2010
31965   4/10/2010
31965   8/21/2010

我希望我的ID 31965的結果是:5/8/2000和8/21/2010,這樣我最終可以計算出日期差異。

您可以一步完成此操作,確保“日期”列為dtype datetime,

df['Date'] = pd.to_datetime(df['Date'])

df.groupby('ID')['Date'].agg(['first','last'])

現在,我懷疑您的數據可能沒有正確排序,但如果您仍想要最早和最新的日期,那么您可以這樣做:

df.groupby('ID')['Date'].agg(['min','max']).rename(columns={'min':'first','max':'last'})

或者您可以使用sort_values:

df.sort_values('Date').groupby('ID')['Date'].agg(['first','last'])

您可能需要以這種方式解析最后一個日期:

import datetime

def parser(x):
    return datetime.strptime(str(x), '%m/%d/%Y')

在這里,您將日期字符串提供給函數,函數返回一個解析日期。 您可以類似地解析第一個日期,並生成與上一個日期一致的內容; 您可能需要在區域%m/%d/%Y進行更改。 那應該可以解決你的問題。 閱讀此頁面以獲取更多信息: https//docs.python.org/2/library/datetime.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM