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

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

Pandas:在兩次之間生成日期時間并將結果作為數據框中的新行傳遞

Pandas:在兩次之間生成日期時間并將結果作為數據框中的新行傳遞

呼啦一陣風 2022-06-14 16:26:42
我正在處理df具有以下結構的數據框:   start_time            end_time                key            vol0  2018-08-23 00:00:00   2018-08-23 01:30:00     abcd_eg        0.921  2018-08-23 00:15:00   2018-08-23 01:45:00     defg_x2        0.27我正在嘗試在開始時間和結束時間之間生成 15 分鐘的間隔。我希望在同一數據幀(或新數據幀)中生成新行,如下所示: start_time            end_time                  key             vol0  2018-08-23 00:00:00   2018-08-23 01:30:00     abcd_eg         0.921  2018-08-23 00:15:00   2018-08-23 01:30:00     abcd_eg         0.922  2018-08-23 00:30:00   2018-08-23 01:30:00     abcd_eg         0.923  2018-08-23 00:45:00   2018-08-23 01:30:00     abcd_eg         0.924  2018-08-23 01:00:00   2018-08-23 01:30:00     abcd_eg         0.925  2018-08-23 01:15:00   2018-08-23 01:30:00     abcd_eg         0.926  2018-08-23 01:30:00   2018-08-23 01:30:00     abcd_eg         0.927  2018-08-23 00:15:00   2018-08-23 01:45:00     defg_x2         0.278  2018-08-23 00:30:00   2018-08-23 01:45:00     defg_x2         0.279  2018-08-23 00:45:00   2018-08-23 01:45:00     defg_x2         0.2710 2018-08-23 01:00:00   2018-08-23 01:45:00     defg_x2         0.2711 2018-08-23 01:15:00   2018-08-23 01:45:00     defg_x2         0.2712 2018-08-23 01:30:00   2018-08-23 01:45:00     defg_x2         0.2713 2018-08-23 01:45:00   2018-08-23 01:45:00     defg_x2         0.27日期列是 type datetime[64], key 是objectvol 是float。我到目前為止嘗試的是:b=[]lst = []for i, row in df.iterrows():b = pd.date_range(start=row.start_time, end=row.end_time, freq='15min',closed=None)lst.append(b)使用.iterrows()因為我有大約 125 條記錄。這為我提供DatetimeIndex了數據框中所有開始時間和結束時間值的時間序列,間隔為 15 分鐘。在此之后,我嘗試在數據框中作為lst新列傳遞,如下所示:unpackdfdf['unpack'] = lst我的想法是,如果我可以將這些值作為 df 中的新列,我可以使用此解決方案將它們提取為行。但是這個過程是行不通的。我怎么能用熊貓做到這一點?
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

我的五十美分:


首先重新創建示例df:


df = pd.DataFrame({"start_time": [datetime(2018, 8, 23), datetime(2018, 8, 23, 0, 15)],

                   "end_time": [datetime(2018, 8, 23, 1, 30), datetime(2018, 8, 23, 1, 45)],

                   "key": ["abcd_eg", "defg_x2"],

                   "vol": [0.92, 0.27]})

循環開始時間,為每個 start_time 創建一個具有所需索引的新數據幀,并將它們存儲在一個列表中。


dfs = []

for row in df.itertuples():

    part_df = pd.DataFrame(index=pd.DatetimeIndex(start=row.start_time, end=row.end_time, freq='15T'), 

                           data={'end_time': row.end_time, 'key': row.key, 'vol': row.vol})

    part_df.index.name = 'start_time'

    dfs.append(part_df)

現在連接所有數據幀并重置索引:


result = pd.concat(dfs).reset_index()

給出以下結果:


    start_time          end_time            key     vol

0   2018-08-23 00:00:00 2018-08-23 01:30:00 abcd_eg 0.92

1   2018-08-23 00:15:00 2018-08-23 01:30:00 abcd_eg 0.92

2   2018-08-23 00:30:00 2018-08-23 01:30:00 abcd_eg 0.92

3   2018-08-23 00:45:00 2018-08-23 01:30:00 abcd_eg 0.92

4   2018-08-23 01:00:00 2018-08-23 01:30:00 abcd_eg 0.92

5   2018-08-23 01:15:00 2018-08-23 01:30:00 abcd_eg 0.92

6   2018-08-23 01:30:00 2018-08-23 01:30:00 abcd_eg 0.92

7   2018-08-23 00:15:00 2018-08-23 01:45:00 defg_x2 0.27

8   2018-08-23 00:30:00 2018-08-23 01:45:00 defg_x2 0.27

9   2018-08-23 00:45:00 2018-08-23 01:45:00 defg_x2 0.27

10  2018-08-23 01:00:00 2018-08-23 01:45:00 defg_x2 0.27

11  2018-08-23 01:15:00 2018-08-23 01:45:00 defg_x2 0.27

12  2018-08-23 01:30:00 2018-08-23 01:45:00 defg_x2 0.27

13  2018-08-23 01:45:00 2018-08-23 01:45:00 defg_x2 0.27  


查看完整回答
反對 回復 2022-06-14
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

我看到您添加了新信息。也許這就是你要找的,如果 15 分鐘間隔的數量是固定的,那么你可以試試這個。Edit2:現在,它也適用于非固定的 15 分鐘間隔。


import pandas as pd


gap = '15min'


date_start = ['2018-08-23 00:00:00','2018-08-23 00:15:00','2018-08-24 00:45:00', '2018-08-24 00:30:00']


date_end = ['2018-08-23 01:30:00','2018-08-23 01:45:00','2018-08-24 01:00:00','2018-08-24 02:45:00']


count = 0

to_repeat = []


data = {'start_time':date_start,'end_time':date_end,'key':['abcd_eg','defg_x2', 'whef_98','tuyr_23'],'vol':[0.92,0.27,0.87,0.90]}


df = pd.DataFrame(data)


for _ in zip(date_start, date_end):


  temp = pd.date_range(_[0], _[1], freq=gap)

  to_repeat.append(len(temp))


  if count==0:

    ind = temp


  else:

    ind = ind.append(temp)


  count+=1


df_final = df.reindex(df.index.repeat(to_repeat))


df_final['start_time'] = ind


df_final.reset_index(inplace=True)

df_final.drop(columns='index',inplace=True)


print(df_final)

輸出


            start_time             end_time      key   vol

0  2018-08-23 00:00:00  2018-08-23 01:30:00  abcd_eg  0.92

1  2018-08-23 00:15:00  2018-08-23 01:30:00  abcd_eg  0.92

2  2018-08-23 00:30:00  2018-08-23 01:30:00  abcd_eg  0.92

3  2018-08-23 00:45:00  2018-08-23 01:30:00  abcd_eg  0.92

4  2018-08-23 01:00:00  2018-08-23 01:30:00  abcd_eg  0.92

5  2018-08-23 01:15:00  2018-08-23 01:30:00  abcd_eg  0.92

6  2018-08-23 01:30:00  2018-08-23 01:30:00  abcd_eg  0.92

7  2018-08-23 00:15:00  2018-08-23 01:45:00  defg_x2  0.27

8  2018-08-23 00:30:00  2018-08-23 01:45:00  defg_x2  0.27

9  2018-08-23 00:45:00  2018-08-23 01:45:00  defg_x2  0.27

10 2018-08-23 01:00:00  2018-08-23 01:45:00  defg_x2  0.27

11 2018-08-23 01:15:00  2018-08-23 01:45:00  defg_x2  0.27

12 2018-08-23 01:30:00  2018-08-23 01:45:00  defg_x2  0.27

13 2018-08-23 01:45:00  2018-08-23 01:45:00  defg_x2  0.27

14 2018-08-24 00:45:00  2018-08-24 01:00:00  whef_98  0.87

15 2018-08-24 01:00:00  2018-08-24 01:00:00  whef_98  0.87

16 2018-08-24 00:30:00  2018-08-24 02:45:00  tuyr_23  0.90

17 2018-08-24 00:45:00  2018-08-24 02:45:00  tuyr_23  0.90

18 2018-08-24 01:00:00  2018-08-24 02:45:00  tuyr_23  0.90

19 2018-08-24 01:15:00  2018-08-24 02:45:00  tuyr_23  0.90

20 2018-08-24 01:30:00  2018-08-24 02:45:00  tuyr_23  0.90

21 2018-08-24 01:45:00  2018-08-24 02:45:00  tuyr_23  0.90

22 2018-08-24 02:00:00  2018-08-24 02:45:00  tuyr_23  0.90

23 2018-08-24 02:15:00  2018-08-24 02:45:00  tuyr_23  0.90

24 2018-08-24 02:30:00  2018-08-24 02:45:00  tuyr_23  0.90

25 2018-08-24 02:45:00  2018-08-24 02:45:00  tuyr_23  0.90


查看完整回答
反對 回復 2022-06-14
  • 2 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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