我有一个由3列(时间戳,名称,值)组成的DataFrame。
DF的行按时间戳按升序排序。
给出了在DF中可能不完全匹配的输入时间戳和目标名称(保证是连续的)。
我想在以下位置找到该行的索引:
行中的时间戳等于输入的时间戳或
是下一个小于输入时间戳记,并且行名等于给定名称。
此外,时间戳中的时间戳都是唯一的。
给出以下DataFrame:
row timestamp name value
0 1 A V1
1 3 B V2
2 5 C V3
3 7 D V4
4 9 A V5
5 11 B V6
6 13 C V7
7 15 D V8
对于时间戳= 3,名称= B,索引应为1
对于时间戳= 6,名称= C,索引应为2
对于时间戳= 13,名称= A,索引应为4
对于时间戳= 6且名称= D,索引应为NaN,因为在时间6或之前没有值
如何在熊猫中(希望有效地)做到这一点?
如果查询的数据框不为空,则可以运行名称查询,按时间戳排序并获取具有最大值的项目的索引。这样的事情应该起作用。
def run_query(df, search_name, search_timestamp):
query = df.loc[(df['name'] == search_name) & (df['timestamp'] <= search_timestamp)] \
.sort_values('timestamp')
return None if query.empty else query.index[-1]