gpt4 book ai didi

python - 合并两个 Pandas 数据帧,在一个时间列上重新采样,插值

转载 作者:太空狗 更新时间:2023-10-29 18:08:12 25 4
gpt4 key购买 nike

这是我关于 stackoverflow 的第一个问题。对我放轻松!

我有两个数据集由不同的采集系统以不同的采样率同时采集。一个非常规则,另一个则不是。我想创建一个包含两个数据集的数据帧,使用规则间隔的时间戳(以秒为单位)作为两者的引用。不规则采样的数据应该插值到规则间隔的时间戳上。

这里有一些玩具数据展示了我正在尝试做的事情:

import pandas as pd
import numpy as np

# evenly spaced times
t1 = np.array([0,0.5,1.0,1.5,2.0])
y1 = t1

# unevenly spaced times
t2 = np.array([0,0.34,1.01,1.4,1.6,1.7,2.01])
y2 = 3*t2

df1 = pd.DataFrame(data={'y1':y1,'t':t1})
df2 = pd.DataFrame(data={'y2':y2,'t':t2})

df1 和 df2 看起来像这样:

df1:
t y1
0 0.0 0.0
1 0.5 0.5
2 1.0 1.0
3 1.5 1.5
4 2.0 2.0

df2:
t y2
0 0.00 0.00
1 0.34 1.02
2 1.01 3.03
3 1.40 4.20
4 1.60 4.80
5 1.70 5.10
6 2.01 6.03

我正在尝试合并 df1 和 df2,在 df1.t 上插入 y2。期望的结果是:

df_combined:
t y1 y2
0 0.0 0.0 0.0
1 0.5 0.5 1.5
2 1.0 1.0 3.0
3 1.5 1.5 4.5
4 2.0 2.0 6.0

我一直在阅读 pandas.resample 的文档,并搜索以前的 stackoverflow 问题,但未能找到解决我的特定问题的方法。有任何想法吗?看起来应该很容易。

更新:我想出了一个可能的解决方案:首先对第二个系列进行插值,然后附加到第一个数据框:

from scipy.interpolate import interp1d
f2 = interp1d(t2,y2,bounds_error=False)
df1['y2'] = f2(df1.t)

给出:

df1:
t y1 y2
0 0.0 0.0 0.0
1 0.5 0.5 1.5
2 1.0 1.0 3.0
3 1.5 1.5 4.5
4 2.0 2.0 6.0

这行得通,但如果有更好的方法,我仍然愿意接受其他解决方案。

最佳答案

如果您从 Series 构建单个 DataFrame,使用时间值作为索引,如下所示:

>>> t1 = np.array([0, 0.5, 1.0, 1.5, 2.0])
>>> y1 = pd.Series(t1, index=t1)

>>> t2 = np.array([0, 0.34, 1.01, 1.4, 1.6, 1.7, 2.01])
>>> y2 = pd.Series(3*t2, index=t2)

>>> df = pd.DataFrame({'y1': y1, 'y2': y2})
>>> df
y1 y2
0.00 0.0 0.00
0.34 NaN 1.02
0.50 0.5 NaN
1.00 1.0 NaN
1.01 NaN 3.03
1.40 NaN 4.20
1.50 1.5 NaN
1.60 NaN 4.80
1.70 NaN 5.10
2.00 2.0 NaN
2.01 NaN 6.03

你可以简单地interpolate它,并只选择定义了 y1 的部分:

>>> df.interpolate('index').reindex(y1)
y1 y2
0.0 0.0 0.0
0.5 0.5 1.5
1.0 1.0 3.0
1.5 1.5 4.5
2.0 2.0 6.0

关于python - 合并两个 Pandas 数据帧,在一个时间列上重新采样,插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26517125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com