第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創(chuàng)建數(shù)據(jù)框中不存在的時間間隔

創(chuàng)建數(shù)據(jù)框中不存在的時間間隔

Go
動漫人物 2022-05-24 15:42:20
我有詳細的工廠、工作站、機器、開始日期時間和結(jié)束日期時間的機器錯誤/機器停止數(shù)據(jù)。我想在機器使用 python/pandas 正常運行時創(chuàng)建時間間隔因此,我希望有 24 小時的時間表,并且每個間隔都標(biāo)記為工作(如果沒有發(fā)生錯誤)或不工作。1 個站(共 17 個)、1 個機器類型(共 10 個)和 1 天的數(shù)據(jù)框如下所示;Stat.  Mac.   start_date          end_date            start_no   end_no  status A     B    2019-01-03 00:00:00  2019-01-03 01:30:00     1         90     pause A     B    2019-01-03 09:35:00  2019-01-03 10:20:00    575        620    pause A     B    2019-01-03 20:20:00  2019-01-03 20:40:00    1220       1240   pause A     B    2019-01-03 21:45:00  2019-01-03 22:45:00    1305       1365   pause對于相同的工作站-機器-天對,請求的數(shù)據(jù)框應(yīng)如下所示;    Stat.  Mac.   start_date          end_date            start_no   end_no  status     A     B    2019-01-03 00:00:00  2019:01:03 00:00:01     0         1      working     A     B    2019-01-03 00:00:00  2019-01-03 01:30:00     1         90     pause     A     B    2019-01-03 01:30:00  2019-01-03 09:35:00     90        575    working     A     B    2019-01-03 09:35:00  2019-01-03 10:20:00    575        620    pause     A     B    2019-01-03 10:20:00  2019-01-03 20:20:00    620        1220   working     A     B    2019-01-03 20:20:00  2019-01-03 20:40:00    1220       1240   pause     A     B    2019-01-03 20:40:00  2019-01-03 21:45:00    1240       1305   working     A     B    2019-01-03 21:45:00  2019-01-03 22:45:00    1305       1365   pause     A     B    2019-01-03 22:45:00  2019-01-03 23:59:00    1365       1439   working我在下面的鏈接中上傳了示例數(shù)據(jù)幀(1000rows-~80kb);https://gofile.io/?c=tKA8Qj我應(yīng)該如何解決這個問題?提前致謝
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

在這個問題中,我們有一個順序模式,我們可以將“start_no”和“end_no”列轉(zhuǎn)換為所需數(shù)據(jù)幀的列。當(dāng)我們采用類似的值時(start_no0, end_no0, start_no1, end_no1, ...),我們實際上得到了“start_no”和“end_no”所需列的最大部分。通過簡單的修復(fù),我們可以獲得完全相同的列。相同的邏輯可以應(yīng)用于 start_date 和 end_date,因為它們代表相同的事物。


由于您有不同的工作站和機器值,我們可以通過使用 Stat.、Mac.、start_date、end_date 索引來將問題分組。在代碼中,我試圖通過忽略原始數(shù)據(jù)集中的時間字段來獲取當(dāng)天的所有值?;旧衔抑皇菍?shù)據(jù)進行分組并迭代每個組以創(chuàng)建一個包含您想要的信息的新數(shù)據(jù)框。


對于您共享的案例,代碼如下所示:


import numpy as np

import pandas as pd


data = pd.read_excel("sample_2.xlsx")


# transform (start|end)_date as only date without time

data["_sDate"] = data.start_date.apply(lambda x: x.strftime("%Y-%m-%d"))

data["_eDate"] = data.end_date.apply(lambda x: x.strftime("%Y-%m-%d"))


# group the data by following columns

grouped = data.groupby(["Station","Machine","_sDate","_eDate"])

# container for storing result of each group

container = []


# iterate the groups

for name, group in grouped:

    # sort them by start_number

    group = group.sort_values("start_number")

    # get (start|end)_numbers into a flatten array

    nums = group[["start_number", "end_number"]].values.flatten()

    # get (start|end)_date into a flatten array

    dates = group[["start_date", "end_date"]].values.flatten()

    ## insert required values to nums and dates

    # we add the first pause time at index 1 to show first working interval

    dates = np.insert(dates, 1 , dates[0] + nums[0]*10**9)

    # we add 0 in the beginning of the array to show first working interval

    nums = np.insert(nums, 0, 0)

    # create df

    nrow = nums.size-1      # decrement, because we add one additional element

    newdf = pd.DataFrame({

        "Station": np.tile(("A"),nrow),

        "Machine": np.tile(("B"),nrow),

        "start_date": dates[:-1],

        "end_date": dates[1:],

        "start_no": nums[:-1],

        "end_no": nums[1:],

        "status": np.tile(["working", "pause"], nrow//2)

    })

    container.append(newdf)


df_final = pd.concat(container)

df_final.index = range(0,df_final.shape[0])


查看完整回答
反對 回復(fù) 2022-05-24
?
萬千封印

TA貢獻1891條經(jīng)驗 獲得超3個贊

一種快速但緩慢的方法可能是遍歷所有行并檢查當(dāng)前 + 下一行。您只有 1000 行,所以現(xiàn)在就可以了。這看起來像這樣:


import pandas as pd

df = pd.read_excel("sample_2.xlsx")


df['status'] = 'pause'


df = df.sort_values(['Workcenter','Machine','Error_Reason','Class','start_date','start_time', 'end_date','end_time']).reset_index()

new_df = df.copy()


number_rows = len(df)-1

for i in range(number_rows):

    row = df.loc[i]

    next_row = df.loc[i+1]


    new_row = row

    new_row['status'] = 'working'

    new_row['start_date'] = row['end_date']

    new_row['end_date'] = next_row['start_date']

    new_row['start_number'] = row['end_number']

    new_row['end_number'] = next_row['start_number']

    new_df = new_df.append(new_row)


查看完整回答
反對 回復(fù) 2022-05-24
  • 2 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號