【发布时间】:2022-01-17 05:48:55
【问题描述】:
我有以下 Pandas 数据框(显示前十行):
index_x time_x total_def_x index_y time_y total_def_y event_time
0 2 2005.25394 15.72761 3 2005.25667 8.66223 2005.254962
1 4 2005.25941 11.31783 5 2005.26215 2.79943 2005.260101
2 11 2005.27858 8.74810 12 2005.28131 8.50871 2005.279085
3 18 2005.29774 6.31637 19 2005.30048 10.0420 2005.297804
4 52 2005.39083 0.18209 53 2005.39357 4.42270 2005.393209
5 65 2005.42642 2.71002 66 2005.42916 2.61663 2005.428290
6 106 2005.53867 -0.86598 107 2005.54141 0.26263 2005.539240
7 173 2005.72211 7.91387 174 2005.72485 -4.00652 2005.724622
8 201 2005.79877 4.09495 202 2005.80151 8.35356 2005.800502
9 217 2005.84257 6.63870 218 2005.84531 -1.81069 2005.843362
...
我想要做的是选择时间最接近event_time的时间(time_x或time_y)和相应的变形值(total_def_x或total_def_y)并将值放入一个数据框。到目前为止,我编写的代码如下:
nearest_df = pd.DataFrame(columns=["time", "total_def"])
for et in new_df["event_time"]:
if abs(et - new_df["time_x"].values) < abs(et - new_df["time_y"].values):
nearest_df.append(new_df["time_x", "total_def_x"])
else:
nearest_df.append(new_df["time_y", "total_def_y"])
但是,我尝试重写它的每次尝试都会返回此错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
当我像 if (abs(et - new_df['time_x'].values) < abs(et - new_df['time_y'].values)).all(): 这样修改代码时,我得到了这个错误:
KeyError: ('time_x', 'total_def_x')
预期输出的一个示例是这样的数据帧(nearest_df),因为将选择 time_x 和 time_y 与 event_time 的差异中较小的一个,以及它们各自的变形(total_def_x 或 y):
time total_def
2005.25667 8.66223
2005.25941 11.31783
2005.27858 8.74810
对此的任何帮助将不胜感激。
【问题讨论】:
-
你能提供预期的输出吗?您想要每行最接近的 x 或 y?
-
我编辑了帖子以显示预期结果。最接近 event_time 的一个,无论是 x 还是 y。
标签: python pandas dataframe numpy filter