亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何基于組添加時間序列列

如何基于組添加時間序列列

MM們 2023-09-05 20:16:50
關聯上面是我使用 python 修改的 CSV 文件示例的鏈接,我需要添加一個時間列,如果前一行的日期匹配,則該時間列增加 1。如果日期更改,時間將從 8:00:00 重新開始此外,如果“PL Seq”從 G* 更改為 H*,時間也會從 8 重新開始。我覺得我的邏輯已經很清晰了,只是寫起來有點困難。向 df 'Time' 添加一列,將第一個 'Time' 值設置為 8:00:00讀取 df 中的每一行如果日期值 = 上一行的日期值且 pl seq 值第一個字符 = 第一個字符,則將時間值設置為時間 +1否則將時間值設置為時間*請注意,我已經有了更改訂單 # 的格式和目標狀態日期的代碼當前的MODELCHASS,Prod Date,PL SeqM742-021167,20200917,G0005M359-020535,20200917,G0010M742-022095,20200917,G0015M220-001083,20200918,G0400M742-022390,20200918,G0405M907-004747,20200918,H0090M934-005904,20200918,H0095預期的MODELCHASS,Prod Date,PL Seq,TimeM742 021167,2020-09-17T,G0005,8:00:00M359 020535,2020-09-17T,G0010,8:00:01M742 022095,2020-09-17T,G0015,8:00:02M220 001083,2020-09-18T,G0400,8:00:00M742 022390,2020-09-18T,G0405,8:00:01M907 004747,2020-09-18T,H0090,8:00:00M934 005904,2020-09-18T,H0095,8:00:01@Trenton 我們可以修改這個如果 H 訂單與 G 訂單的日期相同第 6 行中的當前編輯MODELCHASS,Prod Date,PL SeqM742-021167,20200917,G0005M359-020535,20200917,G0010M742-022095,20200917,G0015M220-001083,20200918,G0400M742-022390,20200918,G0405M907-004747,20200917,H0090M934-005904,20200917,H0095預期編輯MODELCHASS,Prod Date,PL Seq,TimeM742 021167,2020-09-17T,G0005,8:00:00M359 020535,2020-09-17T,G0010,8:00:01M742 022095,2020-09-17T,G0015,8:00:02M220 001083,2020-09-18T,G0400,8:00:00M742 022390,2020-09-18T,G0405,8:00:01M907 004747,2020-09-17T,H0090,8:00:00M934 005904,2020-09-17T,H0095,8:00:01
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

  • 將列轉換'Prod Date'為日期時間

  • 對數據幀進行排序'Prod Date''PL Seq'因此'df'與加入的順序相同time_seq。

  • 答案的主要部分是創建一個包含和 的DateRange列表.groupby.apply

  • .groupbyProd Date第一個元素'PL Seq'

    • df.groupby(['Prod Date', df['PL Seq'].str[0]])

  • .apply(lambda x: (pd.date_range(start=x.values[0] + pd.Timedelta(hours=8), periods=len(x), freq='s')).time)

    • 到目前為止,添加 8 小時的 Timedelta,以獲得08:00:00

    • 對于每個組,使用 x 中的第一個值startx.values[0]

    • 的數量periodslen[x]

    • freq,'s'幾秒鐘。

    • 這將創建一個DateRange,從中提取時間.time

  • 測試于python 3.10,pandas 1.4.3

import pandas as pd


# setup test dataframe

data = {'MODELCHASS': ['M742-021167', 'M359-020535', 'M742-022095', 'M220-001083', 'M742-022390', 'M907-004747', 'M934-005904'],

        'Prod Date': [20200917, 20200917, 20200917, 20200918, 20200918, 20200918, 20200918],

        'PL Seq': ['G0005', 'G0010', 'G0015', 'G0400', 'G0405', 'H0090', 'H0095']}


df = pd.DataFrame(data)


# convert Prod Date to a datetime column

df['Prod Date'] = pd.to_datetime(df['Prod Date'], format='%Y%m%d')


# sort the dataframe by values so the order will correspond to the groupby order

df = df.sort_values(['Prod Date', 'PL Seq']).reset_index(drop=True)


# groupby Prod Date and the first character of PL Seq

# create a DateRange sequence for each group

# reshape the dataframe

time_seq = (df.groupby(['Prod Date', df['PL Seq'].str[0]])['Prod Date']

            .apply(lambda x: (pd.date_range(start=x.values[0] + pd.Timedelta(hours=8), periods=len(x), freq='s')).time)

            .reset_index(name='time_seq')

            .explode('time_seq', ignore_index=True))


# join the time_seq column to df

df_new = df.join(time_seq.time_seq)


# display(df_new)

    MODELCHASS  Prod Date PL Seq  time_seq

0  M742-021167 2020-09-17  G0005  08:00:00

1  M359-020535 2020-09-17  G0010  08:00:01

2  M742-022095 2020-09-17  G0015  08:00:02

3  M220-001083 2020-09-18  G0400  08:00:00

4  M742-022390 2020-09-18  G0405  08:00:01

5  M907-004747 2020-09-18  H0090  08:00:00

6  M934-005904 2020-09-18  H0095  08:00:01


查看完整回答
反對 回復 2023-09-05
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號