簡體   English   中英

如何計算python中一個數據幀的時間差?

[英]How to calculate the time difference in a data frame in python?

我想知道如何以 __ 天、__ 小時、__ 分鍾、__ s 的格式獲取時差

例如,第 0 行和第 1 行之間的時間差為 0 天 10 小時 10 分鍾 27 秒

data = {'date': ['2020/06/24', '2020/06/25', '2020/06/27', '2020/06/30'], 
         'time': ['23:00:28', '09:10:55', '03:42:58','16:45:51']}
pd.DataFrame(data)
>>>    
    date        time
0   2020/06/24  23:00:28
1   2020/06/25  09:10:55
2   2020/06/27  03:42:58
3   2020/06/30  16:45:51

假設這是您的數據集

data = {'date': ['2020/06/24', '2020/06/25', '2020/06/27', '2020/06/30'], 
         'time': ['23:00:28', '09:10:55', '03:42:58','16:45:51']}
df = pd.DataFrame(data)
print(df)
         date      time
0  2020/06/24  23:00:28
1  2020/06/25  09:10:55
2  2020/06/27  03:42:58
3  2020/06/30  16:45:51

使用 pd.to_datetime 將數據轉換為正確的日期時間格式后,您可以使用pd.to_datetime .diff

df['date_time'] = pd.to_datetime(df['date'] + ' ' + df['time'])
df['time_diff'] = df['date_time'].diff()
print(df)
         date      time           date_time       time_diff
0  2020/06/24  23:00:28 2020-06-24 23:00:28             NaT
1  2020/06/25  09:10:55 2020-06-25 09:10:55 0 days 10:10:27
2  2020/06/27  03:42:58 2020-06-27 03:42:58 1 days 18:32:03
3  2020/06/30  16:45:51 2020-06-30 16:45:51 3 days 13:02:53

嘗試:

df = df.assign(datetime_diff=pd.to_datetime(df['date'] + " " + df['time'])
               .diff()
               )

.diff()讓你與眾不同

data = {'date': ['2020/06/24', '2020/06/25', '2020/06/27', '2020/06/30'], 
         'time': ['23:00:28', '09:10:55', '03:42:58','16:45:51']}
df = pd.DataFrame(data)

df['datetime'] = df['date'] + " "+df['time']
df['datetime'] = pd.to_datetime(df['datetime'])
df['diff'] = df['datetime'].diff()

如果要更改格式:

def convert_format(diff):
    diff_list = diff.split(":")
    if(len(diff_list)<3):
        return diff
    return diff_list[0] + " hrs" + diff_list[1] + " mins " + diff_list[2] +" secs"

df['diff_str'] = df['diff'].astype(str).apply(convert_format)

Output:

date    time    datetime    diff_str
0   2020/06/24  23:00:28    2020-06-24 23:00:28 [NaT]
1   2020/06/25  09:10:55    2020-06-25 09:10:55 0 days 10 hrs10 mins 27 secs
2   2020/06/27  03:42:58    2020-06-27 03:42:58 1 days 18 hrs32 mins 03 secs
3   2020/06/30  16:45:51    2020-06-30 16:45:51 3 days 13 hrs02 mins 53 secs

你想要這個嗎?

data = {'date': ['2020/06/24', '2020/06/25', '2020/06/27', '2020/06/30'], 
         'time': ['23:00:28', '09:10:55', '03:42:58','16:45:51']}
df = pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['date'] + ' ' + df['time'])
df['diff'] = df['timestamp'] - df['timestamp'].shift(1)
df['diff'] = df['diff'].astype(str).apply(lambda x: x.replace(' days', '').replace(' ', ':').split(':'))
df['diff'] = df['diff'].apply(lambda x: f"{x[0]}days {x[1]}hours {x[2]}minutes {x[3]}seconds" if x[0] != 'NaT' else '')

暫無
暫無

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

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