의료 기록 앱에서 DB를 분석하도록 요청 받았습니다. 그래서 기록의 무리과 같습니다많은 열에 agg()가있는 팬더 groupby
그래서 내가 PX에 의해 2014 년 2011 년 3 개 백만 개 이상의 기록을 다시 시작해야한다, 나는 그들이, 각 환자에 대한 먹으 렴 때문에 그래서 환자 ID를 반복 알고 의사에게 많은 방문이 있어야합니다. 환자를 그룹화하거나 재개 할 수있는 방법은 무엇입니까?
의료 기록 앱에서 DB를 분석하도록 요청 받았습니다. 그래서 기록의 무리과 같습니다많은 열에 agg()가있는 팬더 groupby
그래서 내가 PX에 의해 2014 년 2011 년 3 개 백만 개 이상의 기록을 다시 시작해야한다, 나는 그들이, 각 환자에 대한 먹으 렴 때문에 그래서 환자 ID를 반복 알고 의사에게 많은 방문이 있어야합니다. 환자를 그룹화하거나 재개 할 수있는 방법은 무엇입니까?
"이력서"가 무슨 뜻인지는 모르겠지만 원하는 것은 데이터를 더 좋은 방식으로 정렬하고 표시하는 것뿐입니다. 당신이 할 수있는이 같은 시각적 그룹 (= 순서) 기록 "px- 및 fecha 현명한"
df.set_index(['px', 'fecha'], inplace=True)
편집 :
당신은 몇 가지 일반적인 속성을 기준으로 데이터의 그룹화를 수행, 다른 컬럼의 데이터에 어떤 종류의 집계를 사용할지 결정해야합니다. 간단히 말하면 groupby를 수행하면 각각의 "pacient_id"왼쪽에 대해 나머지 각 열에 대해 하나의 빈 필드 만 가질 수 있으므로 집계 함수 (예 : 합계, 평균, 최소, 평균, 수 등)를 사용해야합니다. 그룹화 된 데이터의 원하는 표현 가능한 값을 반환합니다.
이미지가 잠겨 있기 때문에 작업하기가 어렵습니다.이 열은 보이지 않기 때문에 "연령"이 의미하는 바를 말할 수는 없지만 원하는 것을 얻을 수 있기를 바랍니다. 더미 데이터와 다음의 예를 보면 :
import pandas as pd
import numpy as np
from datetime import datetime
import random
from datetime import timedelta
def random_datetime_list_generator(start_date, end_date,n):
return ((start_date + timedelta(seconds=random.randint(0, int((end_date - start_date).total_seconds())))) for i in xrange(n))
#create random dataframe with 4 sample columns and 50000 rows
rows = 50000
pacient_id = np.random.randint(100,200,rows)
dates = random_datetime_list_generator(pd.to_datetime("2011-01-01"),pd.to_datetime("2014-12-31"),rows)
age = np.random.randint(10,80,rows)
bill = np.random.randint(1,1000,rows)
df = pd.DataFrame(columns=["pacient_id","visited","age","bill"],data=zip(pacient_id,dates,age,bill))
print df.head()
# 1.Only perform statictis of the last visit of each pacient only
stats = df.groupby("pacient_id",as_index=False)["visited"].max()
stats.columns = ["pacient_id","last_visited"]
print stats
# 2. Perform a bit more complex statistics on pacient by specifying desired aggregate function for each column
custom_aggregation = {'visited':{"first visit": 'min',"last visit": "max"}, 'bill':{"average bill" : "mean"}, 'age': 'mean'}
#perform a group by with custom aggregation and renaming of functions
stats = df.groupby("pacient_id").agg(custom_aggregation)
#round floats
stats = stats.round(1)
print stats
원래 더미 dataframe 그래서 다음과 같습니다
pacient_id visited age bill
0 150 2012-12-24 21:34:17 20 188
1 155 2012-10-26 00:34:45 17 672
2 116 2011-11-28 13:15:18 33 360
3 126 2011-06-03 17:36:10 58 167
4 165 2013-07-15 15:39:31 68 815
첫 번째 집합은 다음과 같이 보일 것이다 :
,210둘째, 복잡한 집계는 다음과 같이 보일 것이다는 :
visited age bill
first visit last visit mean average bill
pacient_id
100 2011-01-06 06:11:33 2014-12-29 00:01:11 45.2 507.9
101 2011-01-01 20:44:55 2014-12-22 06:00:48 44.0 503.8
102 2011-01-02 17:42:59 2014-12-26 11:51:41 43.2 498.0
103 2011-01-01 03:07:41 2014-12-29 15:01:32 43.5 495.1
104 2011-01-07 18:58:11 2014-12-18 15:29:28 45.9 501.7
105 2011-01-01 03:43:12 2014-12-30 11:08:29 44.3 513.0
이 예제는 가야한다. Additionaly,이 주제에 대해 많이 가르쳐 줄 수있는 팬더 그룹비 집계에 대해 좋은 SO question이 있습니다.
정확히 무엇을 찾고 있습니다. 설명 할 수 있는지 보도록하겠습니다. 그래서 나는 2011 년에 각 환자의 모든 상담을 "붕괴 또는 재개"하고 싶습니다. 그래서 나이 필드에서 최대 값으로 끝납니다. 그래서 이력서에 의해 년 나이에 콜 최대 반환 기능을 실행하고 1 년마다 각 환자의 나이로 끝나는 것을 의미합니다. 내가 알 겠어? – alex
대단원! 고마워, 그게 내가 누락 된 바로 그 것이다. – alex