行依赖日期范围最快的计数

时间:2014-10-14 15:15:08

标签: python pandas

我有一个看起来像这样的数据集(End_Time是Start_Time后7小时):

        Value               Start_Time              End_Time
1         A            2014-10-14 05:00:00    2014-10-14 12:00:00
2         A            2014-10-14 08:00:00    2014-10-14 15:00:00
3         A            2014-10-14 14:00:00    2014-10-14 21:00:00
4         A            2014-10-14 06:00:00    2014-10-14 13:00:00
5         B            2014-10-14 05:00:00    2014-10-14 12:00:00
6         B            2014-10-14 06:00:00    2014-10-14 13:00:00

我想添加一个新列,该列计算具有相同值的行数以及该行的Start_Time和End_Time内的Start_Time。结果如下:

        Value               Start_Time              End_Time             Count          
1         A            2014-10-14 05:00:00    2014-10-14 12:00:00          2
2         A            2014-10-14 08:00:00    2014-10-14 15:00:00          1
3         A            2014-10-14 14:00:00    2014-10-14 21:00:00          0
4         A            2014-10-14 06:00:00    2014-10-14 13:00:00          2
5         B            2014-10-14 05:00:00    2014-10-14 12:00:00          1
6         B            2014-10-14 06:00:00    2014-10-14 13:00:00          0

目前我有:

for i in range(0, len(df['Value'])):
    df['Count'][i] = df[(df['Start_Time'] >= df['Start_Time'][i]) & (df['Start_Time'] <= df['End_Time'][i]) & (df['Value'] == df['Value'][i])].shape[0]

我有大量的行,结果非常慢,目前包含在计数中,因此每行需要减去1。

有更快的方法进行此计算吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

在我看来,如果Start_Time增加,你可以快速实现这一目标的唯一方法。您可以通过保持有序行来在插入时调度一些复杂性。使用排序的行列表,测试以下的行是否在[Start_Time, End_Time]内是很容易的,因为只要你得到一个不在约束中的元素,你就会知道以下元素也不会。< / p>

如果您无法在插入时保留排序列表,那么我认为没有比排序列表更有效的方法了。