Использование одного DataFrame для поиска строк, соответствующих условию в другом DataFrame - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь сделать список заказов на ремонт в «ежедневном» фрейме данных, содержащем количество ремонтов, открытых в магазине.

The repair table looks like this:
data = [['USA', 2007-01-01, 2007-01-10],
        ['EUR', 2007-01-01, 2007-01-08],
        ['ASIA', 2007-01-02, 2007-01-05],
        ['EUR', 2007-01-07, 2007-0-10]]
columns = ['Location', 'Date In', 'Date Out']
repairs = pd.DataFrame(data, columns=columns)
print(repairs)

Я хочу создать фрейм данных, содержащий все магазины и количество деталей, которые находятся в магазине каждый день. Итак, результат должен выглядеть так:

locations = repairs['Location'].unique()
dates = pd.date_range(start=2007-01-01, end = 2007-01-11)
locwork = pd.DataFrame(index=dates, columns=locations)
print(locwork)

Есть ли векторизованный способ добиться этого? Потому что единственный способ, которым я мог найти, - это перебрать фрейм данных locwork и посмотреть, сколько строк в фрейме данных ремонта удовлетворяет условию. Однако из-за размера обоих DataFrames (300 000 ремонтов, 01.01.2007 по сегодняшний день) этот вариант не достаточно быстр. Мое текущее решение таково (извините за скрытый код, мне просто нужно рабочее решение:

for date in dates:
    temp = repairs.loc[(repairs['Date In'] < date) & (repairs['Date Out'] > date)][['Date In', 
    'Location']]
    temp['Date In'] = date
    temp = temp.reset_index()
    temp = temp.drop(columns=['index'])
    locdates = locdates.append(temp)
    temp = temp.iloc[0:0]

locdates['Date'] = locdates['Date In']
locdates['Date In'] = 1

locwork = locdates.groupby(['Date', 'Shop']).sum()
locwork = locwork.unstack()\
            .fillna(0)\
            .reset_index()\
            .droplevel(0, axis = 1)
locwork = locwork.set_index(locwork.columns[0])
print(locwork)

Каким будет более аккуратный, более pythoni c способ добиться этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...