Извлечение данных из индекса в новый столбец в Dataframe - PullRequest
3 голосов
/ 14 мая 2019

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

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

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

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)

1 Ответ

5 голосов
/ 14 мая 2019

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