У меня есть кадр данных Pandas (attendance_records). Он содержит записи о посещаемости в местной школе.Как эффективно развернуть диапазон диапазонов дат в Pandas?
Каждая строка имеет 4 столбца: 1) имя учащегося, отсутствующего (имя), 2) адрес студента (адрес), 3) первый день отсутствия (начало) и 4) последний день отсутствия (конец).
Например, одна строка может быть:
Bobby 101 1st Street 9/1/2014 9/3/2014
Это означает, что Бобби отсутствовал каждый день между 9/1 и 9/3 (включительно).
Я хочу, чтобы развернуть таблицу следующим образом:
Bobby 101 1st Street 9/1/2014
Bobby 101 1st Street 9/2/2014
Bobby 101 1st Street 9/3/2014
До сих пор у меня есть некоторый код (ниже), который будет делать эту работу, но это realllly медленно на больших таблиц, потому что это в основном происходит по строкам через таблицу. Любые идеи о том, как сделать вещи быстрее?
import pandas as pd
def full_data(dataframe):
allframe = pd.DataFrame()
for i in dataframe.index:
newframe = pd.DataFrame()
newframe['dates'] = pd.date_range(dataframe.iloc[i].start, dataframe.iloc[i].end, freq = 'D')
newframe['name'] = dataframe.iloc[i]['name']
newframe['address'] = dataframe.iloc[i]['address']
allframe = allframe.append(newframe)
if i%1000 == 0:
print i
return allframe
attendance_records = full_data(attendance_records)
Спасибо, это было полезно. Думаю, в Пандах нет встроенной функции для достижения этого результата? – monkeybiz7
Там может быть что-то немного чище. Вышеприведенное решение является просто общим решением для быстрого слияния кучи данных. Ваша конкретная проблема может быть более чистой (и быстро?) Решена с помощью перекрестного продукта (http://stackoverflow.com/questions/13269890/cartesian-product-in-pandas), но мне придется больше думать о как бы это произошло. – rhaskett