提问人:Hotone 提问时间:11/15/2023 最后编辑:Hotone 更新时间:11/15/2023 访问量:28
Pandas 在 groupby 中对特定输入值的特定列进行插值
Pandas interpolate within groupby on certain column for a specific input value
问:
我不需要插值所有列,也不需要插值单个列,而是插值一组列(例如两列)。此外,我需要对用于插值的参考列中大多数时候缺少的值进行插值。一个小例子将阐明:
原始数据帧:
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?
答:
1赞
not_speshal
11/15/2023
#1
我会使用值为 15 in 的新行,然后:concat
pivot_column
interpolate
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
评论