合并2个数据框。
我有一个数据帧A,其值在非恒定时间戳中:
creation_time value_A
2020-09-22 00:00:35 83.0
2020-09-22 00:00:43 83.0
2020-09-22 00:02:20 82.0
2020-09-22 00:03:09 77.0
2020-09-22 00:03:04 77.0
2020-09-22 00:03:44 77.0
2020-09-22 00:07:10 71.0
...
2020-10-23 11:42:31 136.0
2020-10-23 11:42:32 136.0
2020-10-23 11:42:35 136.0
2020-10-29 11:42:31 136.0
2020-10-29 11:42:32 136.0
2020-10-29 11:42:35 136.0
第一列是范围。例如,从2020-09-22的0到75,value_B应该为60。
value_A_range creation_time value_B
0 2020-09-22 00:00:00.000000 60
75 2020-09-22 00:00:00.000000 65
124 2020-09-22 00:00:00.000000 300
143 2020-09-22 00:00:00.000000 360
0 2020-10-16 12:23:25.000000 60
75 2020-10-16 12:23:25.000000 400
124 2020-10-16 12:23:25.000000 400
143 2020-10-16 12:23:25.000000 450
0 2020-10-28 15:53:31.000000 10
82 2020-10-28 15:53:31.000000 30
114 2020-10-28 15:53:31.000000 40
129 2020-10-28 15:53:31.000000 60
139 2020-10-28 15:53:31.000000 110
预期结果:获取数据帧A中每个时间戳的value_B。在可用时间戳上匹配value_A的范围。
creation_time value_A value_B
2020-09-22 00:00:35 83.0 65
2020-09-22 00:00:43 83.0 65
2020-09-22 00:02:20 82.0 65
2020-09-22 00:03:09 60.0 60
2020-09-22 00:03:04 60.0 60
2020-09-22 00:03:44 60.0 60
2020-09-22 00:07:10 129.0 300
...
2020-10-23 11:42:31 136.0 400
2020-10-23 11:42:32 156.0 450
2020-10-23 11:42:35 136.0 400
2020-10-29 11:42:31 85.0 30
2020-10-29 11:42:32 120.0 40
2020-10-29 11:42:35 160.0 110
我正在尝试的资源:range和merge_asof
我将两个数据框放在两个文件A.csv和B.csv中
import pandas as pd
df_a = pd.read_csv("A.csv", parse_dates=["creation_time"])
df_b = pd.read_csv("B.csv", parse_dates=["creation_time"])
加载数据后,我用B计算时间间隔的开始和结束
df_b["A_end"] = df_b["creation_time"] + pd.to_timedelta(df_b["value_A_range"], unit="sec")
df_b["A_start"] = df_b["A_end"].apply(lambda cell: df_b[df_b["A_end"]<cell]["A_end"].max())
在B中搜索value_B之前(应该只有一个值,因此使用min,max或mean都没有关系)
df_a["value_B"] = df_a["creation_time"].apply(
lambda cell: df_b[(df_b["A_start"]<cell) & (df_b["A_end"]>=cell)]["value_B"].mean()
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句