[英]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 date
是2000-05-08
, last date
是8/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.