2016-12-02 90 views
5

我如何計算使用熊貓過去的月份?我寫了以下內容,但是這段代碼並不優雅。你能告訴我更好的方法嗎?熊貓時代月在

import pandas as pd 

df = pd.DataFrame([pd.Timestamp('20161011'), 
        pd.Timestamp('20161101') ], columns=['date']) 
df['today'] = pd.Timestamp('20161202') 

df = df.assign(
    elapsed_months=(12 * 
        (df["today"].map(lambda x: x.year) - 
        df["date"].map(lambda x: x.year)) + 
        (df["today"].map(lambda x: x.month) - 
        df["date"].map(lambda x: x.month)))) 
# Out[34]: 
#   date  today elapsed_months 
# 0 2016-10-11 2016-12-02    2 
# 1 2016-11-01 2016-12-02    1 

回答

7

可以四捨五入日期到本月與to_period(),然後減去結果:

df['elapased_months'] = df.today.dt.to_period('M') - df.date.dt.to_period('M') 

df 
#   date  today elapased_months 
#0 2016-10-11 2016-12-02    2 
#1 2016-11-01 2016-12-02    1 
+1

這樣,elapased_months dtype是「object」,因此我通過使用pd.to_numeric()將「object」轉換爲「int64」。謝謝您的回答。 – Keiku

1

下面將做到這一點:

df["elapsed_months"] = ((df["today"] - df["date"]). 
         map(lambda x: round(x.days/30))) 


# Out[34]: 
#   date  today elapsed_months 
# 0 2016-10-11 2016-12-02    2 
# 1 2016-11-01 2016-12-02    1 
+0

對不起,沒有解釋。這樣,2016-11-30和2016-12-02之間的月份就是0.我想在這種情況下得到1。但它有幫助。謝謝您的回答。 – Keiku

2

,你也可以嘗試:

df['months'] = (df['today'] - df['date'])/np.timedelta64(1, 'M') 
df 
#  date  today months 
#0 2016-10-11 2016-12-02 1.708454 
#1 2016-11-01 2016-12-02 1.018501