2017-04-17 3 views
4

에서 팬더가 나는이처럼 보이는 dataframe이, 계산 및 NumPy와 평균 :GROUPBY, 파이썬

 userId movieId rating 
0   1  31  2.5 
1   1  1029  3.0 
2   1  3671  3.0 
3   2  10  4.0 
4   2  17  5.0 
5   3  60  3.0 
6   3  110  4.0 
7   3  247  3.5 
8   4  10  4.0 
9   4  112  5.0 
10   5  3  4.0 
11   5  39  4.0 
12   5  104  4.0 

내가 사용자와 평균에 의해 고유의 userId를, 평가의 번호를 가진 dataframe을받을 필요를 등급 :

 userId count mean 
0   1  3 2.83 
1   2  2  4.5 
2   3  3  3.5 
3   4  2  4.5 
4   5  3  4.0 

누군가가 도와 줄 수 있습니까?

답변

1
df1 = df.groupby('userId')['rating'].agg(['count','mean']).reset_index() 
print(df1) 


    userId count  mean 
0  1  3 2.833333 
1  2  2 4.500000 
2  3  3 3.500000 
3  4  2 4.500000 
4  5  3 4.000000 
3

드롭 movieId 우리가 사용하지 않을 때문에, userId을 GROUPBY하고 집계 방법을 적용

import pandas as pd 

df = pd.DataFrame({'userId': [1,1,1,2,2,3,3,3,4,4,5,5,5], 
        'movieId':[31,1029,3671,10,17,60,110,247,10,112,3,39,104], 
        'rating':[2.5,3.0,3.0,4.0,5.0,3.0,4.0,3.5,4.0,5.0,4.0,4.0,4.0]}) 

df = df.drop('movieId', axis=1).groupby('userId').agg(['count','mean']) 

print(df) 

생산 :

 rating   
     count  mean 
userId     
1   3 2.833333 
2   2 4.500000 
3   3 3.500000 
4   2 4.500000 
5   3 4.000000 
다음
+1

df.drop '('movieId '축 = 1) .groupby ('userId를 ') rating.agg (['평균 '카운트'])'. 멀티 인텍스 정리하는거야. 하나 추가 – piRSquared

1

가 사용 NumPy와 기반 접근 방식을 userID 열이 정렬 된 것처럼 보입니다. -

unq, tags, count = np.unique(df.userId.values, return_inverse=1, return_counts=1) 
mean_vals = np.bincount(tags, df.rating.values)/count 
df_out = pd.DataFrame(np.c_[unq, count], columns = (('userID', 'count'))) 
df_out['mean'] = mean_vals 

샘플 런 -

In [103]: df 
Out[103]: 
    userId movieId rating 
0  1  31  2.5 
1  1  1029  3.0 
2  1  3671  3.0 
3  2  10  4.0 
4  2  17  5.0 
5  3  60  3.0 
6  3  110  4.0 
7  3  247  3.5 
8  4  10  4.0 
9  4  112  5.0 
10  5  3  4.0 
11  5  39  4.0 
12  5  104  4.0 

In [104]: df_out 
Out[104]: 
    userID count  mean 
0  1  3 2.833333 
1  2  2 4.500000 
2  3  3 3.500000 
3  4  2 4.500000 
4  5  3 4.000000