2017-03-15 33 views
5

Tôi nghĩ rằng điều này nên đơn giản nhưng những gì tôi đã nhìn thấy là các kỹ thuật liên quan đến việc lặp qua các trường ngày dataframe để xác định sự khác biệt giữa hai ngày. Và tôi đang gặp rắc rối với nó. Tôi quen thuộc với MSSQL DATEDIFF vì vậy tôi nghĩ Pandas datetime sẽ có một cái gì đó tương tự. Tôi có lẽ nó nhưng tôi đang thiếu nó.Pandas - Số tháng giữa hai ngày

Có cách nào Pandonic xác định số tháng làm số nguyên giữa hai ngày (datetime) mà không cần lặp lại không? Hãy nhớ rằng có khả năng có hàng triệu hàng để hiệu suất là một sự cân nhắc.

Những ngày là những đối tượng datetime và kết quả sẽ như thế này - mới cột là Tháng:

Date1   Date2   Months 
2016-04-07  2017-02-01 11 
2017-02-01  2017-03-05 1 

Trả lời

18

đây đó là, người bạn của tôi:

df['nb_months'] = (df.date2 - df.date1)/ np.timedelta64(1, 'M')

+0

tôi nhận được một phao khi chạy cái này. Đó là những gì bạn mong đợi? – shavar

+1

chỉ cần chuyển đổi sang số nguyên với astype ('int') bro –

+1

df ['month'] = ((df.date2 - df.date1)/np.timedelta64 (1, 'M')). Astype (int) làm lừa. Hoàn thành nhanh chóng. Cảm ơn bạn. – shavar

5
df.assign(
    Months= 
    (df.Date2.dt.year - df.Date1.dt.year) * 12 + 
    (df.Date2.dt.month - df.Date1.dt.month) 
) 

     Date1  Date2 Months 
0 2016-04-07 2017-02-01  10 
1 2017-02-01 2017-03-05  1 
+0

Điều này cũng hoạt động. Tôi nhận được 10 và 1 tháng. Với giải pháp @Noobie tôi nhận được 9 và 1. Vì vậy, đây là một trong những bao gồm. Tùy thuộc vào nhu cầu của tôi cho bất kỳ dự án cụ thể nào cả hai đều hữu ích. Cảm ơn. – shavar

+0

Tôi upvoted bạn cho sportsmanship :) –

+0

@Noobie âm thanh tốt với tôi. Bây giờ tôi biết bạn là một môn thể thao tốt ... – piRSquared

Các vấn đề liên quan