У меня есть кадр данных pandas со столбцами run, type, vectime и vecvalue.Для строк (возможно, не правильный термин здесь) с типом == «вектор» vectime и vecvalue содержат массивы:
loaded_csv.tail(2)
run type module name attrname attrvalue value vectime vecvalue
709 run-id1 vector client499.app[0] packetReceived:vector(packetBytes) NaN None NaN [20.02926688, 20.04433504, 20.04556544, 20.059... [1460.0, 1460.0, 1460.0, 1460.0, 1460.0, 1460....
710 run-id1 attr client499.app[0] packetReceived:vector(packetBytes) checkSignals False NaN None None
«Vectime» содержит временные точки для значений в «vecvalue».
Мне удалось запустить простые вещи, такие как apply min () max () к массиву и присвоение значения исходному фрейму данных, выполнив:
loaded_csv.loc[(loaded_csv.type == "vector"),('min_vectime')] = loaded_csv.loc[(loaded_csv.type == "vector"),('vectime')].apply(min)
Который в моем понимании «фильтры»строки с типом == vector и добавляет новый столбец 'min_vectime' с соответствующим значением.
Однако я не могу понять, как сделать аналогичную вещь с resample на 'vecvalue', используя 'vectime' в качестве индекса и заменяяисходные значения (с пересчитанными значениями) или добавление новых столбцов.
Я нашел способ достичь части этого, получая данные из кадра данных, создавая Series и применяя повторную выборку.
for row in loaded_csv[loaded_csv.type == "vector"].itertuples():
print_series = pd.Series(row.vecvalue, index = pd.to_timedelta(row.vectime, unit='s'))
result = print_series.resample('10ms',label='right').sum()*8
resultPlot = result.rolling( window=30, min_periods=10).mean()
Я ищу более чистый и менее сложный способ.
Есть много примеров по каждой из этих задач - нарезка кадра данных, применение функции, будь то using. resample напрямую или через .apply (), но в более простой / другой структуре данных, и я теряюсь где-то посередине.
Частичное решение
Я нашел способ превратить массивы вПоследовательность и повторная выборка, но когда я пытаюсь вставить обратно в фрейм данных новый столбец, я получаю только NaN.Я должен был обернуть его в pd.Dataframe (), чтобы включить его в результирующий Dataframe.Но теперь у меня есть столбец с Dataframe [Series] вместо просто Series.
loaded_csv.loc[(loaded_csv.type == "vector"),('resampled')] = loaded_csv.loc[(loaded_csv.type == "vector"),('vectime', 'vecvalue')].apply(lambda x: pd.DataFrame(pd.Series(x.vecvalue, index = (pd.to_timedelta(x.vectime, unit='s')))), axis= 1)
loaded_csv.loc[(loaded_csv3.type == "vector"),('resampled')].head()
76 0
00:00:20.029266 1460....
157 0
Name: resampled, dtype: object