Как посчитать количество экземпляров между двумя датами / временем - PullRequest
1 голос
/ 26 апреля 2019

Noobie здесь, так что, пожалуйста, потерпите меня. Я постараюсь сделать это как можно более кратким.

У меня есть два кадра данных:

df2: состоит из уникальных visit number для каждого человека, время прибытия человека в наш магазин, время отправления человека из нашего магазина

df1: Подмножество visit numbers из df2 (а также некоторые другие данные, отсутствующие в df2).

Каждый visit number в df1 находится в df2, но обратное неверно.

Что мне нужно сделать, это: Для каждого visit number в df1 определите общее количество людей, присутствовавших на момент прибытия человека из df1.

Я подумал об этой проблеме следующим образом (я предоставил код ниже): 1. Итерация по df1 2. Возьмите visit ID с df1 3. Примените это visit ID к df2, чтобы узнать время прибытия этого человека 4. Создайте mask, используя это время прибытия 5. Примените это mask к df2, затем просто посчитайте количество строк

for index, row in df1.iterrows():
    visit_id = row['ID_number']
    df2row = df2[(df2['ID_number'] == visit_id
    arrival_time = df2row['Arrival_Date/Time']
    mask = (df2['Arrv Date/Time'] < arrival_time) & (df2['Disch 
    Date/Time'] > arrival_time)
    total_customers = len(df2.loc(mask))

Однако, когда я запускаю этот код, я получаю сообщение об ошибке:

ValueError: Can only compare identically-labeled Series objects

Это связано с mask, который я создал.

Я провел некоторый поиск, и похоже, что эта ошибка как-то связана? Индексация? но я не могу заставить свой код работать. Я пробовал совет в нескольких других темах безрезультатно.

Буду очень признателен за любые советы или другие способы решения этой проблемы !!!!

Спасибо

нуб

1 Ответ

0 голосов
/ 26 апреля 2019

Проблема в том, что arrival_time является Series:

1    1
Name: Arrival_Date/Time, dtype: int64

Предполагая, что df2row уникален, вы можете извлечь значение, используя .iloc. В последней строке также есть проблема ... вы должны использовать iloc[], а не iloc() или, как предложено @bubble, использовать mask.sum():

for index, row in df1.iterrows():
    visit_id = row['ID_number']
    df2row = df2[(df2['ID_number'] == visit_id)]
    arrival_time = df2row['Arrival_Date/Time'].iloc[0]
    mask = (df2['Arrival_Date/Time'] < arrival_time) & (df2['Disch Date/Time'] > arrival_time)
    total_customers = len(df2.loc(mask))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...