[PYTHON] Python - GroupBy 객체 롤링 함수
PYTHONPython - GroupBy 객체 롤링 함수
나는 시계열 객체를
x = range(0, 6)
id = ['a', 'a', 'a', 'b', 'b', 'b']
df = DataFrame(zip(id, x), columns = ['id', 'x'])
df.groupby('id').sum()
id x
a 3
b 12
그러나 나는 다음과 같이하고 싶다 :
id x
0 a 0
1 a 1
2 a 3
3 b 3
4 b 7
5 b 12
해결법
-
==============================
1.
In [16]: df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1) Out[16]: 0 0.0 1 0.5 2 1.5 3 3.0 4 3.5 5 4.5 In [17]: df.groupby('id')['x'].cumsum() Out[17]: 0 0 1 1 2 3 3 3 4 7 5 12
-
==============================
2.이 오래된 질문을하는 Google 직원에게 :
이 오래된 질문을하는 Google 직원에게 :
@ kekert의 @ Garrett의 답변에 대한 의견과 관련하여
df.groupby('id')['x'].rolling(2).mean()
지금은 더 이상 사용되지 않는
df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1)
흥미롭게도, 새로운 .rolling (). mean () 접근 방식은 group_by 열에 의해 먼저 인덱싱 된 인덱스와 다중 인덱스 시리즈를 반환하는 것으로 보입니다. 반면 이전 접근법은 원래의 df 인덱스로 인덱스 된 인덱스를 반환하기 만 했었지만이 인덱스는 원본 데이터 프레임에 새로운 열로 추가하는 것이 매우 편리했습니다.
그래서 나는 새로운 rolling () 메서드를 사용하고 여전히 동일하게 작동하는 솔루션을 찾았다 고 생각합니다.
df.groupby('id')['x'].rolling(2).mean().reset_index(0,drop=True)
너에게 시리즈를 줄거야.
0 0.0 1 0.5 2 1.5 3 3.0 4 3.5 5 4.5
이 항목을 열로 추가 할 수 있습니다.
df['x'] = df.groupby('id')['x'].rolling(2).mean().reset_index(0,drop=True)
-
==============================
3.나는 기계공에 대해 잘 모르겠다. 그러나 이것은 효과적이다. 반환 값은 단지 nd 배열이다. 나는이 방식으로 누적 또는 "롤링"함수를 적용 할 수 있으며 같은 결과를 가져야한다고 생각합니다.
나는 기계공에 대해 잘 모르겠다. 그러나 이것은 효과적이다. 반환 값은 단지 nd 배열이다. 나는이 방식으로 누적 또는 "롤링"함수를 적용 할 수 있으며 같은 결과를 가져야한다고 생각합니다.
나는 cumprod, cummax 및 cummin으로 그것을 테스트했으며 모두 ndarray를 반환했습니다. 팬더는 이러한 함수가 시리즈를 반환한다는 것을 알기에 충분히 똑똑하다고 생각합니다. 따라서 함수는 집계가 아닌 변환으로 적용됩니다.
In [35]: df.groupby('id')['x'].cumsum() Out[35]: 0 0 1 1 2 3 3 3 4 7 5 12
편집 : 나는이 구문이 시리즈를 반환합니다 궁금 발견 :
In [54]: df.groupby('id')['x'].transform('cumsum') Out[54]: 0 0 1 1 2 3 3 3 4 7 5 12 Name: x
-
==============================
4.판다의 확장 방법을 일반화하고 사용하는 또 다른 방법이 있습니다.
판다의 확장 방법을 일반화하고 사용하는 또 다른 방법이 있습니다.
매우 효율적이며 시계열 계산과 같이 고정 된 창을 사용하여 롤링 창 계산을 완벽하게 수행합니다.
# Import pandas library import pandas as pd # Prepare columns x = range(0, 6) id = ['a', 'a', 'a', 'b', 'b', 'b'] # Create dataframe from columns above df = pd.DataFrame({'id':id, 'x':x}) # Calculate rolling sum with infinite window size (i.e. all rows in group) using "expanding" df['rolling_sum'] = df.groupby('id')['x'].transform(lambda x: x.expanding().sum()) # Output as desired by original poster print(df) id x rolling_sum 0 a 0 0 1 a 1 1 2 a 2 3 3 b 3 3 4 b 4 7 5 b 5 12
from https://stackoverflow.com/questions/13996302/python-rolling-functions-for-groupby-object by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] ssh를 사용하여 파이썬에서 원격으로 스크립트를 실행하는 방법? (0) | 2018.11.05 |
---|---|
[PYTHON] Google 스프레드 시트를 Python으로 액세스 (읽기, 쓰기)하려면 어떻게합니까? (0) | 2018.11.05 |
[PYTHON] 스핑크스에서 autodoc으로 생성 된 함수를 어떻게 상호 참조합니까? (0) | 2018.11.05 |
[PYTHON] Python에서 OpenCV를 사용하는 방법? (0) | 2018.11.05 |
[PYTHON] 파이썬 요청 인증 (access_token) (0) | 2018.11.05 |