[英]Python Pandas GroupBy: calculating age by subtracting date from the last 10 years
我有 dataframe 如下所示:
東風:
ID DATE
KV 26/09/1969 0:00:00
KV 27/05/1970 0:00:00
KV 17/01/1989 0:00:00
KV 27/05/1970 0:00:00
DV 24/07/1984 0:00:00
DV 11/03/2015 0:00:00
DV 4/12/2015 0:00:00
GV 26/10/2005 0:00:00
GV 11/10/2017 0:00:00
GV 11/10/2017 0:00:00
現在我想為過去 10 年的每個 ID 創建一個平均年齡列(使用 groupby)。
所需的 Output:
Average Age
ID 2020 2019 2018 2017 2016 2015 2014 2013 2012 2011
KV 45.5 44.5 43.5 42.5 41.5 40.5 39.5 38.5 37.5 36.5
DV 15.3 14.3 13.3 12.3 11.3 31 30 29 28 27
GV 3 2 1 0 0 0 0 0 0 0
年齡可以通過從日期列中減去過去 10 年來計算。 我使用以下命令計算 2020 年的年齡:
df.groupby('ID')['Date'].agg(lambda x:pd.datetime('01-04-2020')-x['Date'])
但是,我無法弄清楚如何使用單個命令計算過去 10 年的年齡值。 誰能幫我解決這個問題?
為什么不得到像df['Year'] = pd.to_datetime(df['Date']).dt.year
groupby
的年份列,然后在['ID','Year']
上進行分組,例如:
import pandas as pd
def parse_date(td):
### no leap-year in account
resYear = float(td.days)/365.0
resMonth = int((resYear - int(resYear))*365/30)
resYear = int(resYear)
return str(resYear) + "Y" + str(resMonth) + "m"
df = pd.DataFrame([['KV','26/09/1969 0:00:00'],['KV','26/09/1979 0:00:00'],['KV','26/09/1989 0:00:00'],['DV','26/09/1984 0:00:00'],['GV','26/09/2014 0:00:00']],columns=['id','date'])
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['age'] = df.groupby(['id','year'])['date'].apply(lambda x:pd.to_datetime('today')-x).reset_index()['date'].apply(parse_date)
df
output:
完成后pd.pivot_table
應該允許您將年份放入列中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.