gpt4 book ai didi

python - 唯一值之间的线性插值 - Python

转载 作者:行者123 更新时间:2023-12-01 06:49:36 25 4
gpt4 key购买 nike

我有一个 df,其中包含重复时间点的多个值。我想插入两个特定列的值,但仅限于唯一的时间点之间。使用下面的 df,我想仅在唯一时间点之间插入 XY

import pandas as pd
import numpy as np

df = pd.DataFrame({
'Time' : ['09:00:00.1','09:00:00.1','09:00:00.2','09:00:00.2','09:00:00.3'],
'X' : [1,np.nan,np.nan,np.nan,3],
'Y' : [1,np.nan,np.nan,np.nan,3],
'A' : [5,np.nan,np.nan,np.nan,6],
'B' : [5,np.nan,np.nan,np.nan,6],
})

df1 = df.groupby('Time').apply(lambda x: x.interpolate(method='linear'))

注意:我不想要,

df[['X','Y']] = df[['X','Y']].interpolate(method = 'linear')

预期输出是:

        Time    X    Y    A    B
0 09:00:00.1 1.0 1.0 5.0 5.0
1 09:00:00.1 1.0 1.0 Nan NaN
2 09:00:00.2 2.0 2.0 NaN NaN
3 09:00:00.2 2.0 2.0 NaN NaN
4 09:00:00.3 3.0 3.0 6.0 6.0

最佳答案

首先,我们基于Timedrop_duplicates来获取唯一的行,然后我们进行插值,并使用这些值更新我们的原始数据帧。

最后我们使用 ffill 来转发我们的值:

interpolation = df.drop_duplicates('Time')[['X', 'Y']].interpolate()
df.loc[interpolation.index, ['X', 'Y']] = interpolation
df.loc[:, ['X', 'Y']] = df[['X', 'Y']].ffill()
         Time    X    Y    A    B
0 09:00:00.1 1.00 1.00 5.00 5.00
1 09:00:00.1 1.00 1.00 nan nan
2 09:00:00.2 2.00 2.00 nan nan
3 09:00:00.2 2.00 2.00 nan nan
4 09:00:00.3 3.00 3.00 6.00 6.00
<小时/>

另一种方法是使用np.floor,但这适用于您的示例数据帧中的场景(情况可能并非如此) :

df[['X', 'Y']] = np.floor(df[['X', 'Y']].interpolate())
         Time    X    Y    A    B
0 09:00:00.1 1.00 1.00 5.00 5.00
1 09:00:00.1 1.00 1.00 nan nan
2 09:00:00.2 2.00 2.00 nan nan
3 09:00:00.2 2.00 2.00 nan nan
4 09:00:00.3 3.00 3.00 6.00 6.00

关于python - 唯一值之间的线性插值 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080184/

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