Как применить повторную выборку к столбцу фрейма данных, содержащему массив - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть кадр данных 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...