У меня есть набор данных временных рядов с 10 единицами оберегания. В каждый день каждая единица наблюдения может заниматься деятельностью в течение нескольких часов. Поэтому я (позволяет говорить) 4 переменных в DataFrame:Группировка и трансформация данных Pandas
Дата - дата Unit - единица наблюдения acitvity - некоторая активность CumHours - суммарное количество часов, затраченных на единицу на деятельности.
Мне нужно создать переменную «Hours_calc», в которой указано, сколько часов было потрачено на любую активность по каждой строке в каждый день. После импорта всех нормальным бит части я делаю это:
DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])
Я считаю, что мне нужна метод преобразования, и я думаю, что первый аргумент, переданные функции преобразования (как указано) является колонкой DF как ряд как с методом agg(). Это правильно?
Я написал следующую функцию, но, как вы увидите, я понятия не имею, для расчета я должен иметь в виду DF или DFGrouped, или что? В общем, как обращаться к строкам/столбцам внутри goruped данных? Кроме того, могу ли я попытаться вернуть серию такой же длины, как и группа groupby?
def WorkingHours(x, Column):
LISTHOURS = []
for row in xrange(1, len(x)):
Tot = int(DFGrouped[Column][row]) - int(DFGrouped[Column][row - 1])
LISTHOURS.append(Tot)
return pd.Series(LISTHOURS)
TESTDF = DFGrouped.transform({Hours_calc : lambda x : WorkingHours(x, 'CumHours')})
Кроме того, я что-нибудь в документации о пропускании Dict, чтобы преобразовать не видя, но я не вижу какой-либо другой способ выполнения функции только с одной переменной/столбца в Gorup.
Куда я ошибаюсь? Сообщение об ошибке долго запутывает, но заканчивается на «Функция преобразования недопустима для типов данных».
Я не уверен, правильно ли я понял вашу проблему, но разве вы не должны группировать по дате, подразделению, а не по Unit и Activity? Таким образом, вы можете просто использовать сумму CumHours для каждой группы, чтобы получить общее количество часов на все действия. – yemu
Я так не думаю, мне нужно ежедневное количество часов, потраченных на любую деятельность. Так, например, представьте, что в период времени unit1 выполняет две активности, не обязательно в последовательные дни. CumHours измеряет совокупное время, потраченное этим подразделением на деятельность, проведенную в этот день. Чтобы найти ежедневные часы, мне нужно принять кумулятивные часы в определенный день и вычесть кумулятивные часы с последнего дня, когда эта деятельность была выполнена. Следовательно, группировка по единицам/активности и сортировка по дате., –
, можете ли вы представить пример файла данных с некоторыми заполненными данными? – yemu