Хобрук: Ваш путь к мастерству в программировании

Извлечь данные из индекса в новый столбец в Dataframe

Как извлечь данные на основе значений индекса в разных столбцах?

До сих пор мне удавалось извлекать данные на основе индекса в том же столбце (блок из 5).

Кадр данных выглядит следующим образом:

3017     39517.3886
3018     39517.4211
3019     39517.4683
3020     39517.5005
3021     39517.5486
5652     39628.1622
5653     39628.2104
5654     39628.2424
5655     39628.2897
5656     39628.3229
5677     39629.2020
5678     39629.2342
5679     39629.2825
5680     39629.3304
5681     39629.3628

Где данные, извлеченные в столбце, составляют +/- 2 строки вокруг значения индекса.

Я хотел бы иметь что-то более похожее на это:

  3017-3021   5652-5656   5677-5681
1 39517.3886  39628.1622  39629.2020
2 39517.4211  39628.2104  39629.2342
3 39517.4683  39628.2424  39629.2825
4 39517.5005  39628.2897  39629.3304
5 39517.5486  39628.3229  39629.3628

и так далее в зависимости от количества данных, которые я хочу извлечь.

Код, который я использую для извлечения данных на основе индекса:

## find index based on the first 0 of a 000 - 111 list
a = stim_epoc[1:]
ss = [(num+1) for num,i in enumerate(zip(stim_epoc,a)) if i == (0,1)]

## extract data from a df (GCamp_ps) based on the previous index 'ss'
fin = [i for x in ss for i in range(x-2, x + 2 + 1) if i in range(len(GCaMP_ps))]
df = time_fip.loc[np.unique(fin)]
print(df)

  • Where the index is +/- 2 raw. Что это значит? Что вы хотите отдельные группы, когда индекс изменяется более чем на 2? 14.05.2019
  • Вы можете добавить индекс в виде столбца, используя df[index_col] = df.index, а затем работать оттуда. 14.05.2019
  • Извините, ребята, я был недостаточно ясен. Я имел в виду, что значения, извлеченные на основе индекса, составляют +/- 2 строки вокруг значения индекса. Я хотел бы сгруппировать «блоки», извлеченные в разных столбцах. 14.05.2019

Ответы:


1

Сформируйте группы из 5 последовательных рядов (так как вы тянете +/- 2 ряда от центра). Затем создайте метки столбца и индекса и pivot

df = df.reset_index()
s = df.index//5   # If always 5 consecutive values. I.e. +/-2 rows from a center.    

df['col'] = df.groupby(s)['index'].transform(lambda x: '-'.join(map(str, x.agg(['min', 'max']))))
df['idx'] = df.groupby(s).cumcount()

df.pivot(index='idx', columns='col', values=0)  # Assuming column named `0`

Выход:

col   3017-3021   5652-5656   5677-5681
idx                                    
0    39517.3886  39628.1622  39629.2020
1    39517.4211  39628.2104  39629.2342
2    39517.4683  39628.2424  39629.2825
3    39517.5005  39628.2897  39629.3304
4    39517.5486  39628.3229  39629.3628
14.05.2019
  • Умное решение! Мне это нравится! 14.05.2019
  • Хорошее решение - у меня есть UDF, использующий граф и связанные компоненты для выполнения той же задачи. Для безопасности, может быть, добавить сортировку в начале? Я знаю, что данные, которые он дал, уже были отсортированы, но если это не так, это взорвет это дело. 14.05.2019
  • @flyingmeatball. Да, я думаю, если все группы гарантированно не пересекаются, то сортировка уместна и безопасна. Если, однако, данные генерируются путем взятия некоторого индекса, а затем +/2, вы можете каким-то образом представить выборку 3000 [2998-3002] в качестве центра, а затем 3001 [2999-3003]. В этом случае сортировка нарушила бы группировку (и моя группировка diff потерпит неудачу), в то время как df.reset_index().index//5 по-прежнему сохранит группы и позволит группам перекрываться, пока они отображаются вместе. 14.05.2019
  • Новые материалы

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..