如何在最接近熊猫中另一列值的浮动范围内合并/汇总数据

时间:2019-08-05 18:57:57

标签: python pandas

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

1 个答案:

答案 0 :(得分:1)

首先定义所需的步骤。

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