Given entrance and exit logs, find the population maximum
Algorithm
I don't understand the purpose of comparing the timestamp of the next datum here:

if (i &lt; len(data)-1 and data[i][0] == data[i+1][0]):
  continue


The two events happened during the same second, but it's reasonable to assume that they are ordered, and therefore we should consider the total within that single second, unless the problem statement says otherwise.
Without that constraint, we have no need for the index i, and can consider just the members of the input data; we can give the elements meaningful names:
  for time,quantity,direction in data:

Now, we know we won't find a new maximum when people are exiting (assuming we're not given negative numbers of people), so we can move the test into the += branch:
    if direction == 1:
      # Some people entered
      people += quantity
      # Have we reached a new maximum?
      if people &gt; max_people:
        max_time, max_people = time, people
    elif direction == 0:
      # Some people left
      people -= quantity
    else:
      raise ValueError(direction)

General review

PEP8 recommends four spaces per indent level.

This doc-comment is both incomplete and incorrect:

&quot;&quot;&quot;
output: 1487800378 # since the increase in the number of people
                   # in the mall is the
&quot;&quot;&quot;



The doc-comment is in the wrong place (it should be just within the function body).

We should use a main guard.

Consider using doctest to provide more test cases.



Improved code
def find_busiest_period(data):
    &quot;&quot;&quot;
    Find the timestamp when the greatest number of people
    are in the building.

    &gt;&gt;&gt; find_busiest_period([]) is None
    True

    &gt;&gt;&gt; find_busiest_period([ [0, 0, 2] ])
    Traceback (most recent call last):
        ...
    ValueError: 2

    &gt;&gt;&gt; find_busiest_period([ [0, -5, 0] ])
    Traceback (most recent call last):
        ...
    ValueError: -5

    &gt;&gt;&gt; find_busiest_period([ [0, 5, 1], [2, 5, 1], [3, 5, 0] ])
    2

    &gt;&gt;&gt; find_busiest_period([ [1487799425, 14, 1], \
                              [1487799425, 4,  0], \
                              [1487799425, 2,  0], \
                              [1487800378, 10, 1], \
                              [1487801478, 18, 0], \
                              [1487801478, 18, 1], \
                              [1487901013, 1,  0], \
                              [1487901211, 7,  1], \
                              [1487901211, 7,  0] ])
    1487901211
    &quot;&quot;&quot;  
    people = 0 
    max_time = None
    max_people = 0

    for time,quantity,direction in data:
        if quantity &lt; 0:
            raise ValueError(quantity)
        if direction == 1:
            # Some people entered
            people += quantity
            # Have we reached a new maximum?
            if people &gt; max_people:
                max_time, max_people = time, people
        elif direction == 0:
            # Some people left
            people -= quantity
        else:
            raise ValueError(direction)

    return max_time 


if __name__ == &quot;__main__&quot;:
    import doctest
    doctest.testmod()