scipy 根据Pandas的日期插值

q3qa4bjr  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(146)

我有以下数据集

import pandas as pd
import numpy as np
df = pd.read_excel("https://github.com/norhther/datasets/raw/main/ncp1b.xlsx", 
                   sheet_name="Sheet1")
df2 = pd.read_excel("https://github.com/norhther/datasets/raw/main/ncp1b.xlsx", 
                    sheet_name="Sheet2")
df2.dropna(inplace = True)

对于第一个df X-Axis ValueY-Axis Value上的每一组值,其中第一个是日期,第二个是值,我希望创建具有相同日期的行。例如,df.iloc[0,0]的时间戳是Timestamp('2020-08-25 23:14:12')。但是,在同一行的随后的列中,可能存在与不同的Y-Axis Value相关联的其它日期。该特定行中的第一个是X-Axis Value NCVE-064 HPNDE,时间戳为2020-08-25 23:04:12,并且Y-Axis Value与值0.952相关联。
我想要完成的是在一个时间间隔内插入这些值,可能是10分钟,然后合并这些结果,使每行具有相同的日期。
因为df2不一样,在一个时间间隔内插入这些值,并将它们添加到原始 Dataframe 中。有什么方法可以做到这一点吗?

hfyxw5xn

hfyxw5xn1#

诀窍是要认识到日期时间可以表示为相对于某个时间流逝的秒数。
没有进一步的上下文部分,最难的事情是决定在什么时候你想要得到插值。

import pandas as pd
import numpy as np
from scipy.interpolate import interp1d

df = pd.read_excel(
    "https://github.com/norhther/datasets/raw/main/ncp1b.xlsx", 
    sheet_name="Sheet1",
)

x_columns = [col for col in df.columns if col.startswith("X-Axis")]

# What time do we want to align the columsn to?

# You can use anything else here or define equally spaced time points

# or something else.

target_times = df[x_columns].min(axis=1)

def interpolate_column(target_times, x_times, y_values):
    ref_time = x_times.min()

    # For interpolation we need to represent the values as floats. One options is to
    # compute the delta in seconds between a reference time and the "current" time.
    deltas = (x_times - ref_time).dt.total_seconds()

    # repeat for our target times
    target_times_seconds = (target_times - ref_time).dt.total_seconds()

    return interp1d(deltas, y_values, bounds_error=False,fill_value="extrapolate" )(target_times_seconds)

output_df = pd.DataFrame()
output_df["Times"] = target_times

output_df["Y-Axis Value NCVE-063 VPNDE"] = interpolate_column(
    target_times,
    df["X-Axis Value NCVE-063 VPNDE"],
    df["Y-Axis Value NCVE-063 VPNDE"],
)

# repeat for the other columns, better in a loop

相关问题