【发布时间】:2021-02-06 06:39:45
【问题描述】:
我有一个看起来像这样的 Pandas DataFrame:
>>> df
Start_Time End_Time
0 2014-10-16 15:05:17 2014-10-16 17:13:14
1 2014-10-16 14:56:37 2014-10-16 15:07:17
2 2014-10-16 14:25:16 2014-10-16 18:06:17
...
现在,我有另一个包含多个时间戳的 DataFrame:
>>> times
Time
0 2014-10-16 15:17:17
1 2014-10-16 14:53:37
2 2014-10-16 14:26:16
...
我最后想要收到的是行数,其中 Start_Time
>>> times
Time Count
0 2014-10-16 15:17:17 1
1 2014-10-16 15:05:37 2
2 2014-10-16 14:26:16 1
...
当然,我可以通过遍历时间并使用 loc 创建 sub_dfs 来做到这一点:
ls_len = []
for index, row in times.iterrows():
sub_df = df.loc[(df['Start_Time']<row['Time']) & (df['End_Time']>row['Time'])]
ls_len.append(len(sub_df))
times['Count'] = ls_len
但这非常耗时并且感觉不是最佳的。有没有办法在不迭代的情况下执行此操作? 非常感谢你们!
【问题讨论】:
-
DataFrames 的大小是多少? -
不幸的是相当大,第一个包含几百万行。
-
也许您可以将原来的
df拆分成几个较小的以加快搜索速度? -
我可以尝试,但这将基于很多假设(例如,每行的持续时间 [end_time-start_time] 不应长到几天),所以这会有点有点冒险。
标签: python pandas count timestamp