我想在共享列“ 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
答案 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的情况下)。