簡體   English   中英

使用 pandas date_range 創建一個新的 DataFrame

[英]Create a new DataFrame using pandas date_range

我有以下 DataFrame:

   date_start          date_end
0  2023-01-01 16:00:00 2023-01-01 17:00:00
1  2023-01-02 16:00:00 2023-01-02 17:00:00
2  2023-01-03 16:00:00 2023-01-03 17:00:00
3  2023-01-04 17:00:00 2023-01-04 19:00:00
4  NaN                 NaN

我想創建一個新的 DataFrame,它將包含從每一行的date_end開始到date_start結束的值。 所以對於第一行,使用下面的代碼:

new_df = pd.Series(pd.date_range(start=df['date_start'][0], end=df['date_end'][0], freq= '15min'))

我得到以下信息:

0   2023-01-01 16:00:00
1   2023-01-01 16:15:00
2   2023-01-01 16:30:00
3   2023-01-01 16:45:00
4   2023-01-01 17:00:00

如何在新的 df 中組合 df 的所有行得到相同的結果?

您可以使用列表理解和concat

out = pd.concat([pd.DataFrame({'date': pd.date_range(start=start, end=end,
                                                     freq='15min')})
                  for start, end in zip(df['date_start'], df['date_end'])],
                ignore_index=True))

Output:

                  date
0  2023-01-01 16:00:00
1  2023-01-01 16:15:00
2  2023-01-01 16:30:00
3  2023-01-01 16:45:00
4  2023-01-01 17:00:00
5  2023-01-02 16:00:00
6  2023-01-02 16:15:00
7  2023-01-02 16:30:00
8  2023-01-02 16:45:00
9  2023-01-02 17:00:00
10 2023-01-03 16:00:00
11 2023-01-03 16:15:00
12 2023-01-03 16:30:00
13 2023-01-03 16:45:00
14 2023-01-03 17:00:00
15 2023-01-04 17:00:00
16 2023-01-04 17:15:00
17 2023-01-04 17:30:00
18 2023-01-04 17:45:00
19 2023-01-04 18:00:00
20 2023-01-04 18:15:00
21 2023-01-04 18:30:00
22 2023-01-04 18:45:00
23 2023-01-04 19:00:00

處理 NA:

out = pd.concat([pd.DataFrame({'date': pd.date_range(start=start, end=end,
                                                     freq='15min')})
                  for start, end in zip(df['date_start'], df['date_end'])
                  if pd.notna(start) and pd.notna(end)
                ],
                ignore_index=True)

添加到前面的答案date_range有一個to_series()方法,你也可以這樣進行:

pd.concat(
  [
    pd.date_range(start=row['date_start'], end=row['date_end'], freq= '15min').to_series()
    for _, row in df.iterrows()
  ], ignore_index=True
)

暫無
暫無

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

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