2016-10-05 4 views
0

데이터 세트의 각 사람과 관련된 메트릭을 계산해야하는 데이터 세트가 있습니다. 예를 들어, 나는 내가 무엇을해야하는 등 각 사람 John, Jane, Suse에 대한 등등과 같은 Time Since Last Task, Average Earnings, Total Earnings, Total Tasks Done 및 메트릭을 계산이다, 그래서이Pandas의 다른 열에서 특정 열에 대한 메트릭을 계산하는 방법은 무엇입니까?

id name age task_date task_venue money_earned 
1 John 25 2016-05-01  A    100 
2 Jane 28 2016-05-12  A    120 
1 John 25 2016-05-03  B    150 
3 Suse 21 2016-05-30  B    200 
...   

과 같은 데이터로 dataframe 있습니다.

실제 데이터 세트는 큽니다 (약 1M 행이며 열이 50 ~ 75K입니다). 그러나 이것은 본질적으로 내가해야 할 일을 설명합니다.

이 데이터 프레임을 가져 와서 계산할 때 가장 효율적인 방법은 무엇입니까? 나는 판다 함수를 사용하는 것을 선호하지만 순수한 파이썬도 다른 데이터 프레임에 결과를 저장할 수 있다면 작동 할 것입니다.

답변

3

당신은 같은 groupbyaggregate 측정을 필요로 등 열 money_earnedmeansum, 열 task_venuesize과에 대한 :

print (df.groupby('name').agg({'money_earned':['mean', sum], 'task_venue': len})) 
    task_venue money_earned  
      len   mean sum 
name        
Jane   1   120 120 
John   2   125 250 
Suse   1   200 200 

Aggregation in pandas documentation.


집계 한 후에 당신은 list comprehension에 의해 평면을, 열에 MultiIndex을 할 수 얻을 :

df1 = df.groupby('name').agg({'money_earned':['mean', sum], 'task_venue': len}) 
df1.columns = ['_'.join(col) for col in df1.columns] 
print (df1) 
     task_venue_len money_earned_mean money_earned_sum 
name              
Jane    1    120    120 
John    2    125    250 
Suse    1    200    200 

만약 필요가 집계 사용자 정의 함수 사용 :

df.task_date = pd.to_datetime(df.task_date) 

def f(x): 
    #print (x) 
    return x.min() + pd.Timedelta('3d') 

df1 = df.groupby('name').agg({'money_earned':['mean',sum], 'task_venue': len, 'task_date':f}) 
df1.columns = ['_'.join(col) for col in df1.columns] 
print (df1) 
     task_venue_len task_date_f money_earned_mean money_earned_sum 
name                 
Jane    1 2016-05-15    120    120 
John    2 2016-05-04    125    250 
Suse    1 2016-06-02    200    200 

하는 경우를 집계가 느리다. 원인이 큰 DataFrame, 나는 dask.dataframe.DataFrame.reduction을 제안합니다.

+0

답변 해 주셔서 감사합니다. 이것은 확실히 올바른 방향으로 나를 가리 킵니다. 한 가지 더하기를 원한다면 정규식, 합계, 길이 대신에 하나 이상의 열을 계산에 사용하는 사용자 지정 함수가 필요한 경우 어떻게하면 될까요? 필자는 본질적으로 한 번에 각 메트릭을 계산하고 결국 모든 것을 병합하려고합니다. – sfactor

+0

사용자 지정 함수 추가 - 그룹 당 최소 datetime에 3 일이 추가되었습니다. – jezrael