2013-03-17 1 views
37

나는 팬더를 배우기 시작하고 특정 작업을 수행하는 가장 파이 톤 (또는 팬더 - 토닉?) 방법을 찾고 있습니다. 가정하자팬더 그룹의 결과 플롯

우리는 열이있는 DataFrame이 A, B 및 C

  • 열 A는 부울 값을 포함합니다 : 각 행은 값이 true 또는 false입니다입니다.
  • 열 B에는 플롯 할 몇 가지 중요한 값이 있습니다.

우리가 발견하고자하는 것은 A가 거짓 인 행에 대한 B 값과 A가 참인 행에 대한 B 값의 미묘한 차이입니다.

즉, 열 A의 값 (true 또는 false)으로 그룹화 한 다음 두 그룹의 열 B 값을 같은 그래프에 플로팅 할 수 있습니까? 두 데이터 집합은 점을 구별 할 수 있도록 다르게 표시되어야합니다.


다음의이 프로그램에 다른 기능을 추가 할 수 있습니다 : 그래프하기 전에, 우리는이 값은 전체에 대한 B에 저장된 모든 데이터의 평균 각 행에 대해 다른 값을 계산하고 열 D.에 저장하려면 다섯 기록하기 전에 분 -하지만 A=Truetime=t, 나는 열 D의 값을 계산하려는 우리는 내가 행이있는 경우 A. 즉

, 을 저장 같은 부울 값이 행을 포함하는 는 A=True을 갖는 t-5에서 t까지의 모든 레코드에 대한 B의 평균입니다.

이 경우 groupby를 A 값으로 실행 한 다음이 계산을 각 개별 그룹에 적용하고 마지막으로 두 그룹의 D 값을 플로팅 할 수 있습니까?

+4

당신은 몇 가지 예를 들어 dataframes이 있나요 : 난 그냥 세부 사항을 구체화거야? 'grouped = df.groupby ('A')'변수에 groupby 객체를 저장하는 것과 같은 일을 할 수있는 것처럼 보입니다. for 루프를 그리기 위해서 :'for g, d in grouped : plot (d [ 'B'], color = g)'. 두 번째 질문에서 판다 'rolling_mean'을 사용하여 새 열 D를 만들 수있는 것과 거의 동일합니다. – herrfz

답변

42

@herrfz가 모두 높은 점수를 받았습니다.

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

sin = np.sin 
cos = np.cos 
pi = np.pi 
N = 100 

x = np.linspace(0, pi, N) 
a = sin(x) 
b = cos(x) 

df = pd.DataFrame({ 
    'A': [True]*N + [False]*N, 
    'B': np.hstack((a,b)) 
    }) 

for key, grp in df.groupby(['A']): 
    plt.plot(grp['B'], label=key) 
    grp['D'] = pd.rolling_mean(grp['B'], window=5)  
    plt.plot(grp['D'], label='rolling ({k})'.format(k=key)) 
plt.legend(loc='best')  
plt.show() 

enter image description here

+0

이것은 완벽합니다! 내장 된 "롤링 (rolling)"팬더 (Pandas) 함수에 포함되지 않은 특수 계산을 만들고 싶다면 D 열에 대해 더 많은 사용자 정의 된 계산을 구현하는 방법을 접할 수 있습니까? 감사. (@herrfz) –

+0

'rolling_mean'은 [Pandas의 많은 롤링 기능] (http://pandas.pydata.org/pandas-docs/stable/computation.html#moving-rolling-statistics-moments) 중 하나 일뿐입니다. 커스텀 롤링 기능을 정의하려면'rolling_apply'를 사용하십시오. 연결된 페이지에 예제가 있습니다. – unutbu

+0

감사합니다. 그 예제를 제가 성취하고자하는 것에 적응시키는 데 어려움을 겪고 있습니다. 그래서 다른 질문을 던졌습니다 : http://stackoverflow.com/questions/15487022/customizing-rolling-apply-function-in-python-pandas –