Есть ли простой способ выбрать al oop или цикл данных в pandas / Python? - PullRequest
1 голос
/ 13 июля 2020

Я хотел бы выбрать цикл данных в Python (в данном случае pandas, но это гибкая и повторяющаяся проблема) так, чтобы выбранные данные возвращались к началу данных для n начальных рядов. Я постоянно сталкиваюсь с этой проблемой, и, хотя у меня есть множество рабочих решений для нее, меня интересует, есть ли какой-нибудь встроенный метод для этого, о котором я не знаю?

Вот пример pandas DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame([[0,1],[2,3],[5,6],[7,8]],columns = ['x','y'])

Этот DataFrame, конечно, будет выглядеть так:

   x  y
0  0  1
1  2  3
2  5  6
3  7  8

Я нашел достаточно хорошее решение, чтобы создать массив индексов:

n = 1     #how far through the start of the dataframe to select
select = np.concatenate((range(len(df)),range(n)))

Результат select будет:

array([0, 1, 2, 3, 0])

Если я сделаю df.x[select], я получу то, что ищу:

0    0
1    2
2    5
3    7
0    0
Name: x, dtype: int64

Есть ли какие-то функции в NumPy, pandas или любом другом модуле Python, которые позволили бы такой цикл выбора данных? Что-то вроде df.x[0:+1], которое будет работать аналогично df.x[0:-1] вместо того, как оно работает сейчас? Или метод NumPy, который работает так же, как я заставляю np.arange() работать, комбинируя его с np.concatenate()? Как я уже упоминал, я постоянно сталкиваюсь с этой проблемой, и для такого удобного языка, как Python, это определенно кажется функцией, которая будет или должна существовать. Я что-то упустил или что-то забыл?

Изменить, чтобы уточнить запрос:

Метод, предложенный avloss , заключался в использовании np.tile, т. Е. нужную степень простоты и обобщаемости я ищу, только она чрезмерна для приложений, которые я использую. Это случаи, когда вам нужно закрыть l oop данных cycli c либо для построения, либо для расчета (например, если вы сопоставляете наклоны начала и конца замкнутой кривой с использованием метода конечных разностей). В этих случаях вам нужно повторить только первые n точек данных в серии (где n обычно находится где-то между 1 и 3), чтобы закрыть расчет или построить цикл.

1 Ответ

0 голосов
/ 13 июля 2020

Это не совсем то, о чем вы просите, но np.tile подходит довольно близко: https://numpy.org/doc/stable/reference/generated/numpy.tile.html

Или, если вы хотите сделать это с помощью индексов, вы можете используйте mod division

np.arange(5) % 4 == array([0, 1, 2, 3, 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...