2017-11-16 8 views
1

나는이처럼 보이는 dataframe가 있다고 가정하자 GROUPBY 단어의 평균 수를 계산 :팬더는

df = pd.DataFrame({'id': [1,1,1,1,2,2,2,3,4,4,4,4,4], 
        'feedback': ['one word', np.nan, np.nan, 'test', 
           'second', np.nan, 'test 2', 
           np.nan, 
           'fourth', 'multiple words', 'test 1 2 3', 'things', np.nan]}) 

print(df) 

    id  feedback 
0 1  one word 
1 1    NaN 
2 1    NaN 
3 1   test 
4 2   second 
5 2    NaN 
6 2   test 2 
7 3    NaN 
8 4   fourth 
9 4 multiple words 
10 4  test 1 2 3 
11 4   things 
12 4    NaN 

좀 집계 값을 계산하려는 각 id 에 대한 계산

  • 각각에 대해 피드백을 제공 한 행 수 id
  • 에 대한 피드백의 평균 단어 수id

내 원하는 출력은 다음과 같습니다

id count complete avg_words 
0 1  4   2  1.5 
1 2  3   2  1.5 
2 3  1   0  NaN 
3 4  5   4  2.0 

I이 수행 다음 코드 마지막 포인트를 제외한 모든 :

df.groupby(['id']).agg({'id': 'count', 
         'feedback': ['count', lambda x: len(x)]}).reset_index() 

나에게 제공합니다

id  feedback   
    count count <lambda> 
0 1  4  2  4 
1 2  3  2  3 
2 3  1  0  1 
3 4  5  4  5 

모든 것이 정확합니다. (인덱스도 약간 이상하지만 작은 사안인데)

람다 함수는 자리 표시 자입니다. 각 id에 대해 제공된 피드백의 평균 단어 수를 어떻게 계산합니까?

답변

1

이 시도 :

In [96]: df.assign(avg_words=df['feedback'].str.split().str.len()) \ 
    ...: .groupby('id') \ 
    ...: .agg({'id': 'count','feedback': 'count', 'avg_words': 'mean'}) \ 
    ...: .rename(columns={'id':'count', 'feedback':'complete'}) \ 
    ...: .reset_index() 
Out[96]: 
    id count complete avg_words 
0 1  4   2  1.5 
1 2  3   2  1.5 
2 3  1   0  NaN 
3 4  5   4  2.0