簡體   English   中英

Python Pandas GroupBy:通過從過去 10 年中減去日期來計算年齡

[英]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.

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