2014-10-24 4 views
1

나는 'VALUE'열 여기GROUPBY 여러 열

공통 enteries에 따라 20 개 개의 다른 컬럼에서 값을 정리해 나는 하나의 열을 위해 그것을 어떻게되어 원하는 위치 나는 dataframe 있습니다

df.groupby('VALUE').aggregate({'COUNT':numpy.sum},as_index=False) 

명시 적으로 이름을 쓰지 않는 20 개의 열을 확장하는 더 좋은 방법이 있습니까? 즉, 열 이름 목록을 전달하는 방법이 필요합니다.

이 문제를 설명하는 데 사용할 수있는 예는 아래 hernamesbarbara의 대답을 참조하십시오.

답변

3

팬더 그룹의 보조 표기법을 사용하여 열 이름 목록과 합칠 열을 선택할 수 있습니다. 이게 니가 찾고있는거야?

import numpy as np 
import pandas as pd 

data = { 
    "dim1": [np.random.choice(['foo', 'bar']) for _ in range(10)], 
    "measure1": np.random.random_integers(0, 100, 10), 
    "measure2": np.random.random_integers(0, 100, 10) 
} 

df = pd.DataFrame(data) 
df 

Out[1]: 
    dim1 measure1 measure2 
0 bar   9  86 
1 bar  24  64 
2 bar  47  46 
3 foo  60  98 
4 bar  94  53 
5 foo  95  89 
6 foo  98   9 
7 bar   4  95 
8 foo  63  66 
9 foo  40  47 

df.groupby(['dim1'])['measure1', 'measure2'].sum() 

Out[2]: 
     measure1 measure2 
dim1 
bar  178  344 
foo  356  309 

갱신 2015년 1월 2일지연 아래의 댓글에 답글 달기,하지만 당신은 당신이 가지고 있지만 열을 알고 얼마나 많은 열을 모른다면 결코

보다 더 늦게 명명 규칙에 따라 동적으로 집계 할 열 목록을 구성하십시오. 한 가지 방법이 있습니다.

colnames = ["measure".format(i+1) for i in range(100)] # make 100 fake columns 

df = pd.DataFrame(np.ones((10, 100)), columns=colnames) 
df['dim1'] = [np.random.choice(['foo', 'bar']) for _ in range(10)] # add fake dimension to groupby 

desired_columns = [col for col in df.columns if "94" in col or "95" in col] # select columns 94 and 95 

df.groupby(['dim1'])[desired_columns].sum() 

Out[52]: 
     measure94 measure95 
dim1 
bar   4   4 
foo   6   6 
+0

예를 들어 주셔서 감사합니다. 내 경우에는 약 30 개의 열이 있습니다 : 'measure1', 'measure2'... 'measure30'. 그러나, 단지 'measure1'... 'measure20'에 sum()을 적용하고 싶습니다. df.groupby ([ 'dim1']) [ 'measure1', 'measure2'] .20 개의 열 이름을 모두 쓰지 않고도 sum()을 작성할 수 있습니다. 내 열 이름 중 일부는 프로그램 방식으로 생성되기 때문에 중요합니다. 이름을 미리 모릅니다. – user308827

+0

ok, 열 이름을 목록으로 이동했습니다. 이제는 내가 원하는 것을 할 것입니다. 감사! – user308827