[PYTHON] Python (팬더) 멀티 인덱스 데이터 프레임의 각 레벨에 부분합 추가
PYTHONPython (팬더) 멀티 인덱스 데이터 프레임의 각 레벨에 부분합 추가
다음 데이터 프레임이 있다고 가정합니다.
a b c Sce1 Sce2 Sce3 Sce4 Sce5 Sc6
Animal Ground Dog 0.0 0.9 0.5 0.0 0.3 0.4
Animal Ground Cat 0.6 0.5 0.3 0.5 1.0 0.2
Animal Air Eagle 1.0 0.1 0.1 0.6 0.9 0.1
Animal Air Owl 0.3 0.1 0.5 0.3 0.5 0.9
Object Metal Car 0.3 0.3 0.8 0.6 0.5 0.6
Object Metal Bike 0.5 0.1 0.4 0.7 0.4 0.2
Object Wood Chair 0.9 0.6 0.1 0.9 0.2 0.8
Object Wood Table 0.9 0.6 0.6 0.1 0.9 0.7
각 lvl의 합계를 포함하는 MultiIndex를 만들고 싶습니다. 결과는 다음과 같습니다.
a b c Sce1 Sce2 Sce3 Sce4 Sce5 Sce6
Animal 1.9 1.6 1.4 1.3 2.7 1.6
Ground 0.6 1.4 0.8 0.5 1.3 0.6
Dog 0.0 0.9 0.5 0.0 0.3 0.4
Cat 0.6 0.5 0.3 0.5 1.0 0.2
Air 1.3 0.2 0.7 0.8 1.4 1.0
Eagle 1.0 0.1 0.1 0.6 0.9 0.1
Owl 0.3 0.1 0.5 0.3 0.5 0.9
Object 2.6 1.6 1.8 2.3 2.0 2.3
Metal 0.8 0.3 1.1 1.3 0.9 0.8
Car 0.3 0.3 0.8 0.6 0.5 0.6
Bike 0.5 0.1 0.4 0.7 0.4 0.2
Wood 1.8 1.3 0.6 1.0 1.1 1.5
Chair 0.9 0.6 0.1 0.9 0.2 0.8
Table 0.9 0.6 0.6 0.1 0.9 0.7
지금은 루프를 사용하여 각 레벨에서 세 가지 다른 데이터 프레임을 만든 다음 아래 에서처럼 Excel에서이를 조작합니다. 그래서 가능하면 파이썬으로이 계산을하고 싶었습니다.
for i in range range(0,3):
df = df.groupby(list(df.columns)[0:lvl], as_index=False).sum()
return df
미리 감사드립니다.
해결법
-
==============================
1.MAGIC의 자유로운 사용
MAGIC의 자유로운 사용
pd.concat([ df.assign( **{x: 'Total' for x in 'abc'[i:]} ).groupby(list('abc')).sum() for i in range(4) ]).sort_index() Sce1 Sce2 Sce3 Sce4 Sce5 Sc6 a b c Animal Air Eagle 1.0 0.1 0.1 0.6 0.9 0.1 Owl 0.3 0.1 0.5 0.3 0.5 0.9 Total 1.3 0.2 0.6 0.9 1.4 1.0 Ground Cat 0.6 0.5 0.3 0.5 1.0 0.2 Dog 0.0 0.9 0.5 0.0 0.3 0.4 Total 0.6 1.4 0.8 0.5 1.3 0.6 Total Total 1.9 1.6 1.4 1.4 2.7 1.6 Object Metal Bike 0.5 0.1 0.4 0.7 0.4 0.2 Car 0.3 0.3 0.8 0.6 0.5 0.6 Total 0.8 0.4 1.2 1.3 0.9 0.8 Total Total 2.6 1.6 1.9 2.3 2.0 2.3 Wood Chair 0.9 0.6 0.1 0.9 0.2 0.8 Table 0.9 0.6 0.6 0.1 0.9 0.7 Total 1.8 1.2 0.7 1.0 1.1 1.5 Total Total Total 4.5 3.2 3.3 3.7 4.7 3.9
내가 네가 요구 한 것을 정확히 얻을 수있다.
pd.concat([ df.assign( **{x: '' for x in 'abc'[i:]} ).groupby(list('abc')).sum() for i in range(1, 4) ]).sort_index() Sce1 Sce2 Sce3 Sce4 Sce5 Sc6 a b c Animal 1.9 1.6 1.4 1.4 2.7 1.6 Air 1.3 0.2 0.6 0.9 1.4 1.0 Eagle 1.0 0.1 0.1 0.6 0.9 0.1 Owl 0.3 0.1 0.5 0.3 0.5 0.9 Ground 0.6 1.4 0.8 0.5 1.3 0.6 Cat 0.6 0.5 0.3 0.5 1.0 0.2 Dog 0.0 0.9 0.5 0.0 0.3 0.4 Object 2.6 1.6 1.9 2.3 2.0 2.3 Metal 0.8 0.4 1.2 1.3 0.9 0.8 Bike 0.5 0.1 0.4 0.7 0.4 0.2 Car 0.3 0.3 0.8 0.6 0.5 0.6 Wood 1.8 1.2 0.7 1.0 1.1 1.5 Chair 0.9 0.6 0.1 0.9 0.2 0.8 Table 0.9 0.6 0.6 0.1 0.9 0.7
방법에 관해서는! 나는 그것을 독자를위한 운동으로 남겨 둘 것이다.
-
==============================
2.당신은 집계의 모든 수준에서 부분합을 얻기 위해 두 그룹별로해야합니다. 그런 다음 초기 DF에 다시 추가하십시오. 여기에 관련된 질문이 있습니다.
당신은 집계의 모든 수준에서 부분합을 얻기 위해 두 그룹별로해야합니다. 그런 다음 초기 DF에 다시 추가하십시오. 여기에 관련된 질문이 있습니다.
from https://stackoverflow.com/questions/43238183/python-pandas-add-subtotal-on-each-lvl-of-multiindex-dataframe by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 장고에서 FileField 로컬 파일을 할당하는 방법? (0) | 2018.11.13 |
---|---|
[PYTHON] WCF와 파이썬 (0) | 2018.11.12 |
[PYTHON] 파이썬에서 지역 주민이 네임 스페이스를 호출하지 못하도록합니다. (0) | 2018.11.12 |
[PYTHON] 파이썬에서 범위 함수의 값 건너 뛰기 (0) | 2018.11.12 |
[PYTHON] Cython 패키지와 __init __. pyx : 가능한가? (0) | 2018.11.12 |