我有一个看起来像这样的数据集(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。
有更快的方法进行此计算吗?
谢谢!
答案 0 :(得分:0)
在我看来,如果Start_Time
增加,你可以快速实现这一目标的唯一方法。您可以通过保持有序行来在插入时调度一些复杂性。使用排序的行列表,测试以下的行是否在[Start_Time, End_Time]
内是很容易的,因为只要你得到一个不在约束中的元素,你就会知道以下元素也不会。< / p>
如果您无法在插入时保留排序列表,那么我认为没有比排序列表更有效的方法了。