python - 如何在最接近熊猫中另一列的值的浮点范围内合并/聚合数据
问题描述
我想在共享列“time_stamp”上合并 2 个数据帧(df_a 和 df_b)。两者都包含浮点数,但是 df_a 中的“time_stamp”递增 1,df_b 中的“time_stamp”递增 0.33。我想合并它们并聚合落在 df_a time_stamp 间隔内的 df_b 列的所有值(按最大值)。请指教。
df_a
time_stamp data
0.0 b
1.0 b
2.0 c
3.0 a
df_b
time_stamp data_x data_y
0.33 1 0
0.66 0 0
0.99 1 0
1.32 1 3
1.65 1 0
1.98 0 0
2.31 0 0
2.64 0 0
2.97 0 0
这是所需结果的示例:
time_stamp data data_x data_y
0.0 b 1 0
1.0 b 1 3
2.0 c 0 0
3.0 a N/A N/A
解决方案
首先定义您想要的步骤。
step = 1
创建一个切口,使用步骤
max_time = df['time_stamp'].max()
#Adding the step to the max_time or it will ignore the last value
cutp = pd.cut(df["time_stamp"], np.arange(0,max_time+step,step))
筛选
df_grouped = df.groupby(cutp).max()
结果
time_stamp data_x data_y
time_stamp
(0.0, 1.0] 0.99 1 0
(1.0, 2.0] 1.98 1 3
(2.0, 3.0] 2.97 0 0
以应有的方式设置数据框。
df_grouped = df_grouped.drop(columns=['time_stamp']).reset_index()
df_grouped['time_stamp'] = df_grouped['time_stamp'].apply(lambda val: val.left)
治疗后结果:
time_stamp data_x data_y
0 0.0 1 0
1 1.0 1 3
2 2.0 0 0
然后合并在一起
dfa.merge(df_grouped,on='time_stamp',how='left')
结果
time_stamp data data_x data_y
0 0.0 b 1.0 0.0
1 1.0 b 1.0 3.0
2 2.0 c 0.0 0.0
3 3.0 a NaN NaN
这似乎有点过度工作,但这个解决方案将获得 data_x 和 data_y 列的最大值,merge_asof 不会,通过我的测试它只获得第一列(在 data_x 的情况下)。