2016-12-23 1 views
2

데이터 세트가 이와 비슷하지만 훨씬 더 깁니다.python 팬더에서 groupby 뒤에 열의 누락 된 행을 채우십시오.

Column A Column B Result 
1   1   2.6 
      2   2.75 
      3   2.75 
      4   2.9 
      5   6.025 
2   1   5.95 
      2   9.3 
      3   9.3 
... 
:

Column A Column B Result 
1   1   2.4 
1   4   2.9 
1   1   2.8 
2   5   9.3 
3   4   1.2 

df.groupby(['Column A','Column B'])['result'].mean() 

Column A Column B Result 
1   1   2.6 
      4   2.9 
2   5   9.3 
3   4   1.2 

나는 그래서 이것이다 나의 원하는 테이블 열 A와 열 B의 평균으로 이러한 행에 대한 결과와 열 B 1-10의 범위를 갖고 싶어

바라건대 요점은 점점 커지고 있습니다. 평균적인 것은 매우 혼란 스럽기 때문에 원하는 범위의 누락 된 값을 채울 수있는 것으로 해결할 것입니다. 도움에 감사드립니다!

답변

1

당신은 그룹 당 mean에 의해 fillna와 함께 첫 번째 수준 Column A에 의해 다음 새 MultiIndex.from_product 만든 indexgroupby에 의해 reindex 필요합니다

df = df.groupby(['Column A','Column B'])['Result'].mean() 
mux = pd.MultiIndex.from_product([df.index.get_level_values(0).unique(), 
            np.arange(1,10)], names=('Column A','Column B')) 
df = df.reindex(mux) 
df = df.groupby(level='Column A').apply(lambda x: x.fillna(x.mean())) 
print (df) 
Column A Column B 
1   1   2.60 
      2   2.75 
      3   2.75 
      4   2.90 
      5   2.75 
      6   2.75 
      7   2.75 
      8   2.75 
      9   2.75 
2   1   9.30 
      2   9.30 
      3   9.30 
      4   9.30 
      5   9.30 
      6   9.30 
      7   9.30 
      8   9.30 
      9   9.30 
3   1   1.20 
      2   1.20 
      3   1.20 
      4   1.20 
      5   1.20 
      6   1.20 
      7   1.20 
      8   1.20 
      9   1.20 
Name: Result, dtype: float64 
관련 문제