簡體   English   中英

Python Pandas:兩周內兩個日期之間的差異?

[英]Python Pandas: differences between two dates in weeks?

當試圖在幾周內找到兩個日期之間的差異時:

import pandas as pd

def diff(start, end):
    x = millis(end) - millis(start)
    return x / (1000 * 60 * 60 * 24 * 7 * 1000)

def millis(s):
    return pd.to_datetime(s).to_datetime64()

diff("2013-06-10","2013-06-16")

結果我得到:

Out[15]: numpy.timedelta64(857,'ns')

這顯然是錯誤的。 問題:

  1. 如何獲得以周為單位的差異,而不是納秒,四舍五入為整數值?

  2. 如何從“numpy.timedelta64”對象中獲取價值?

我認為您可以通過除以 numpy 標量來轉換為int

def diff(start, end):
    x = pd.to_datetime(end) - pd.to_datetime(start)
    return int(x / np.timedelta64(1, 'W'))

print (diff("2013-06-10","2013-06-16"))
0
print (diff("2013-06-10","2013-06-26"))
2

參見變頻

您也可以使用pandas.Timedelta

import pandas as pd

def diff(start, end):
    days = pd.to_datetime(end) - pd.to_datetime(start)
    week = int(pd.Timedelta(days).days / 7)
    remainder = pd.Timedelta(days).days % 7
    return str(week) + ' weeks and ' + str(remainder) + ' days'

print(diff("2019-06-10","2019-07-11"))

Output:
4 weeks and 3 days

這是一個簡單的修復:

def diff(start, end):
    x = millis(end) - millis(start)
    return np.ceil(x.astype(int) / (7*86400*1e9))

主要是在操作之前刪除單位(納秒)。

PS:當函數未返回毫秒時,請考慮不要調用您的函數millis()

jezrael 的回答給我帶來了一個錯誤,所以這是一個替代解決方案(以防您在嘗試時也遇到錯誤)

import numpy as np
import pandas as pd
def diff(start, end):
    x = pd.to_datetime(end) - pd.to_datetime(start)
    return (x).apply(lambda x: x/np.timedelta64(1,'W')).astype(int)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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