Pandas 在 groupby 中对特定输入值的特定列进行插值

Pandas interpolate within groupby on certain column for a specific input value

提问人:Hotone 提问时间:11/15/2023 最后编辑:Hotone 更新时间:11/15/2023 访问量:28

问:

这与以下两个主题非常相似: 后续问题 原始问题

我不需要插值所有列,也不需要插值单个列,而是插值一组列(例如两列)。此外,我需要对用于插值的参考列中大多数时候缺少的值进行插值。一个小例子将阐明:

原始数据帧:

    input_date    pivot_column    val1    val2
t
1   2023/11/02    16              3300    37
2   2023/11/02    14              3100    33
3   2023/11/02    10              3000    32.7
4   2023/11/03    17.5            3350    36.11
5   2023/11/03    15.75           3200    33.3
6   2023/11/03    14.25           3000    31.3

对于列 input_date 中的每个唯一值,我想根据列 pivot_column 中的假设值 15 计算列 val1 和 val2 的插值,如下所示

     input_date    pivot_column    val1    val2
t
1    2023/11/02    15              3200    35
2    2023/11/03    15              3100    32.3

我可以使用后续问题线程中的解决方案,即

df["val2_interpolated"] = df[["filename","val2"]].groupby('filename')
.apply(lambda x:x) # WTF
.interpolate(method='linear')["val2"]

但是,例如,如何强制围绕枢轴/输入值 15 进行插值呢?我是否需要在数据帧上应用我自己的插值函数,在该数据帧中,我在列pivot_column下添加一行 15?还是在按 DataFrame 分组后,应用 np.interp?

python-3.x pandas group-by 插值

评论


答:

1赞 not_speshal 11/15/2023 #1

我会使用值为 15 in 的新行,然后:concatpivot_columninterpolate

other = pd.DataFrame({"input_date": df["input_date"].unique(), "pivot_column": 15})
df2 = pd.concat([df,other])
df3 = df2.groupby("input_date").apply(lambda g: g.set_index("pivot_column").interpolate("index")).drop(columns="input_date").reset_index()

#keep only required rows
output = other.merge(df3)

>>> output
   input_date  pivot_column    val1  val2
0  2023/11/02            15  3200.0  35.0
1  2023/11/03            15  3100.0  32.3