首页 > 解决方案 > 如何在最接近熊猫中另一列的值的浮点范围内合并/聚合数据

问题描述

我想在共享列“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

标签: pythonpandas

解决方案


首先定义您想要的步骤。

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 的情况下)。


推荐阅读